grep все до шаблона включительно

В руководстве говорится, что оболочка будет избегать любых циклов, которые могут быть вызваны рекурсией раскрытия псевдонимов.

В вашем примере (a1=a2=a3=a4), если вы выполняете alias a4=a1, вы создаете цикл. Затем, как только вы выполнитеa1(соотв. a2, a3, a4), как только оболочка возвращается кa1(соотв. a2, a3,a4)он будет искать команду с именемa1(соответственно. a2, a3, a4), который НЕ является псевдонимом (, так как это создало бы никогда -не заканчивающийся цикл ).

Пример:

$ a1() { echo Phew, I got out of the loop; }
$ alias a1='echo "(a1)"; a2' a2='echo "(a2)"; a3'
$ alias a3='echo "(a3)"; a4' a4='echo "(a4)"; a1'

$ a1
(a1)
(a2)
(a3)
(a4)
Phew, I got out of the loop

$ a2                              # Command a2 does not exist anywhere
(a2)
(a3)
(a4)
(a1)
a2: command not found
2
01.02.2019, 01:35
3 ответа

Использованиеgrep:

grep -o '.*Exception' file

-o, только ---соответствие
Печатает только совпадающую часть строк.

'.*Exception'
Это будет соответствовать от 0 до неограниченного количества вхождений любого символа (, за исключением разделителей строк ), вплоть до слова «Исключение»

.

Чтобы получить поведение, которое вы упомянули в комментарии (, потяните строку перед и включая Exceptionдо любого начального пробела )вы можете использовать расширенное или perl регулярное выражение для использования управляющего символа \S(любой не -пробельный символ):

grep -oE '\S+Exception' file
5
27.01.2020, 21:50

С утилитами POSIX (поэтому будет работать с реализациями GNU и не -GNU):

все до первого появления Exceptionв строке:

sed -n 's/\(Exception\).*/\1/p'

все до последнего вхождения:

sed -n 's/\(.*Exception\).*/\1/p'

Удалите -nи p, если хотите сохранить (без изменений )строки, не содержащие Exception.

3
27.01.2020, 21:50

С помощью вашего любимого стандартного редактора, изд.:

ed -s input <<< $'1,$s/Exception.*/Exception/\nw\nq'

Это редактирует входной файл inputс здесь -строковым списком команд, а именно:

  1. 1,$--в каждой строке файла (1 до конца $),
  2. s/Exception.*/Exception/--найдите и замените строку «Exception», за которой следует что-либо (.*), просто словом «Exception»
  3. w--записать файл обратно на диск
  4. q--уволился
2
27.01.2020, 21:50

Теги

Похожие вопросы