Глядя на ваш вопрос, я подумал, что должно быть возможно решить его с помощью grep
+ PCRE .
(?s)
)и просмотр вперед(?!...
). $ grep -Pzo -- '--\nare([^\n]*\n)+?(?=--|\Z)' afile
-P
-Расширения PCRE включены -z
-обрабатывает ввод как несколько строк -, используя NUL вместо\n
(новых строк)-o
-показывать только совпадения --\nare([^\n]*\n)+?(?=--|\Z)
are
, а затем продолжение нуля или более не -символов новой строки -или -новой строки. +?
будет соответствовать 1 или более, но не будет -жадным, поэтому он не будет агрессивно продолжаться. (?=--|\Z)
охраняет конец блока в поисках следующего двойного тире --
или конца файла(\Z
). Этот метод использует встроенный модификатор DOTALL, чтобы .
соответствовал символам новой строки (`n `).
$ grep -Pzo -- '(?s)--\nare((?!\n--).)+\n' afile
-P
-Расширения PCRE включены -z
-интерпретирует ввод как несколько -строк, используя NUL вместо\n
(новых строк)-o
-показывать только совпадения (?s)
-встроенный модификатор DOTALL -все точки для соответствия новой строке --\nare
-соответствует новой строке, за которой следуетare
((?!\n--).)+\n
-соответствует символам .
, пока просмотр вперед (?!\n--)
не встречает \n--
.Весь этот блок сопоставления должен состоять как минимум из одного или нескольких(+
)и сопровождаться символом новой строки \n
. Вот grep
решение, в котором используется расширение PCRE(-P
).. Этот метод работает для всех предоставленных примеров, он не работает с такими примерами, как этот:
--
are
some-other-dasher
Но в большинстве случаев, с которыми, как я мог себе представить, приходится бороться, работает иное.
$ grep -Pzo -- '--\nare[^\r\n]+[^-]+' afile
--
are you happy
--
are(you hungry
too
-P
-Расширения PCRE включены -z
-обрабатывает ввод как несколько -строк, используя NUL вместо\n
(новых строк)-o
-показывать только совпадения '--\nare[^\r\n]+[^-]+'
are
. are
, пока не встретит новую строку. Я бы не рекомендовал редактировать системные файлы, так как изменения могут быть потеряны после обновления.
Вместо этого я бы порекомендовал вам:
Либо определите/отмените определение псевдонимов, используя ~/.bashrc
(, это будет работать только для одного пользователя)
Или добавьте свои собственные определения через /etc/profile.d/my-definitions.sh
файл (s ).
Они определены в /etc/profile
фрагментах в /etc/profile.d
; например, псевдоним egrep
происходит от /etc/profile.d/colorgrep.sh
.