Удалить пробелы и число в строках до первого символа в строке - PullRequest
0 голосов
/ 06 июля 2018

У меня есть файл test_file, как показано ниже в Linux.

ags;'s


dkfprper


sdkl;d;;'s

ip access

 100 200 remark
 50 deny pdldsl;l;sd;;l;d
 permit eyuopopqwopq
 10 permit eteioe
 200 200 200 deny abc

remark aiii[dsigdfidflkfk

1 deny

Теперь я хочу извлечь строки, которые содержат ip or remark or deny or permit в них

Я сделал, как показано ниже.

grep -E 'ip|remark|deny|permit' test_file >> string_check

Результат ниже

ip access
 100 200 remark
 50 deny pdldsl;l;sd;;l;d
 permit eyuopopqwopq
 10 permit eteioe
 200 200 200 deny abc
remark aiii[dsigdfidflkfk
1 deny

Теперь из этого я хочу удалить все numbers and spaces из строк, пока не получу ip or remark or deny or permit в качестве начальных слов.

Я хочу получить результат

ip access
remark
deny pdldsl;l;sd;;l;d
permit eyuopopqwopq
permit eteioe
deny abc
remark aiii[dsigdfidflkfk
deny

Я сделал, как показано ниже, но я не получил никакого результата

sed 's/^ *//g' string_check

Это удаляет только пробелы в начале строки

Как мне достичь результата?

1 Ответ

0 голосов
/ 06 июля 2018
sed -E -n 's/^[ 0-9]*(ip|remark|deny|permit)/\1/p' test_file

Разбить это:

  • sed -E говорит, что должен использовать "расширенный" синтаксис регулярного выражения; без него вам понадобится еще много обратных слешей
  • sed -n говорит, что не нужно печатать строки, если не используется команда p
  • Регулярное выражение соответствует пробелам или цифрам в начале строки, за которой следует одно из ключевых слов
  • Замена заменяет эту строку в начале строки только ключевым словом
  • s///p говорит распечатать строку, если замена была сделана
...