Каков символ выхода для &
(чтобы включить матч в замену)?Эквивалентный символ для символа замены в unix
Мне нужно заменить cat
в файле с &quo;cat&quo;
cat file | sed -e 's\cat\&quo;cat&quo;\'
Каков символ выхода для &
(чтобы включить матч в замену)?Эквивалентный символ для символа замены в unix
Мне нужно заменить cat
в файле с &quo;cat&quo;
cat file | sed -e 's\cat\&quo;cat&quo;\'
\
не является оптимальным выбором для замены разделителя – /
часто используется, и гораздо лучше подходит в данном случае, поскольку \
используется для выхода:
sed 's/cat/\&quo;cat\&quo;/' file
Обратите внимание, что вы не должны использовать cat
для подключения к sed; просто введите входной файл в качестве аргумента.
&
необходимо убежать, чтобы получить буквальный текст. &
; в противном случае, он стоит для всей согласованной части шаблона (см manual):
$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa
символов, которые нужно избежать различны в Bourne или POSIX оболочки, чем Bash. Обычно (очень) Bash является надмножеством этих оболочек, поэтому все, что вам нужно в shell
, должно быть экранировано в Bash.
Хорошим общим правилом было бы «если в сомнении, избегайте его». Но избежать некоторых символов дает им особое значение, например \n
. Они перечислены на страницах man bash
под Quoting
и echo
.
Кроме этого, избегайте любого символа, который не является буквенно-цифровым, это безопаснее. Я не знаю ни одного окончательного списка.
Страницы руководства перечисляют их все где-то, но не в одном месте. Изучите язык, это способ быть уверенным.
Тот, кто меня поймал, это !
. Это особый символ (расширение истории) в Bash (и csh), но не в оболочке Korn. Даже echo "Hello world!"
дает проблемы. Использование одиночных кавычек, как обычно, устраняет особое значение.
вы можете объяснить, почему '' & голец требует побега. –
@glennjackman А, да, я сделаю это. О.П знал, что в этом есть что-то особенное. –