В руководстве говорится, что оболочка будет избегать любых циклов, которые могут быть вызваны рекурсией раскрытия псевдонимов.
В вашем примере (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
Использованиеgrep
:
grep -o '.*Exception' file
-o, только ---соответствие
Печатает только совпадающую часть строк.
'.*Exception'
Это будет соответствовать от 0 до неограниченного количества вхождений любого символа (, за исключением разделителей строк ), вплоть до слова «Исключение»
Чтобы получить поведение, которое вы упомянули в комментарии (, потяните строку перед и включая Exception
до любого начального пробела )вы можете использовать расширенное или perl регулярное выражение для использования управляющего символа \S
(любой не -пробельный символ):
grep -oE '\S+Exception' file
С утилитами POSIX (поэтому будет работать с реализациями GNU и не -GNU):
все до первого появления Exception
в строке:
sed -n 's/\(Exception\).*/\1/p'
все до последнего вхождения:
sed -n 's/\(.*Exception\).*/\1/p'
Удалите -n
и p
, если хотите сохранить (без изменений )строки, не содержащие Exception
.
С помощью вашего любимого стандартного редактора, изд.:
ed -s input <<< $'1,$s/Exception.*/Exception/\nw\nq'
Это редактирует входной файл input
с здесь -строковым списком команд, а именно:
1,$
--в каждой строке файла (1 до конца $
), s/Exception.*/Exception/
--найдите и замените строку «Exception», за которой следует что-либо (.*
), просто словом «Exception» w
--записать файл обратно на диск q
--уволился