Что #
символ означает в этой строке:
/bin/sed -e 's#abc#zzz#g'
Что #
символ означает в этой строке:
/bin/sed -e 's#abc#zzz#g'
Ответы:
Это разделитель, точно так "/"
же, как и 's/abc/zzz/g'
.
это означает, что поиск по «abc» заменяет его на «zzz», с глобальным флагом, означает, что делает это для всех «abc» в строке, а не только для первого.
Вы также можете использовать альтернативный разделитель для адреса шаблона, но в этом случае вам нужно экранировать его для правильной интерпретации:
sed -r '\#abc#p'
Это разделитель или разделитель. Наиболее часто используемый, /
как в
sed 's/old/new/' file
Но sed примет первый символ после команды (ей) в качестве разделителя. Вы можете использовать любой удобный символ, например ...
sed 's%old%new%' file
Это очень полезно, если файл содержит /
(или другие условные символы-разделители). Вы можете выбрать в качестве разделителя некоторый символ, который, как вы знаете, вам не нужно будет вкладывать в sed
выражение, избавляя вас от множества раздражающих побегов.
Допустим, вы хотите заменить
https://askubuntu.com/questions
с
https://askubuntu.com/posts
Вы могли бы использовать
sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file
Но лучше использовать
sed 's|https://askubuntu.com/questions|https://askubuntu.com/posts|' file
sbabeb
делает так же, как s/a/e/
.
/
может быть заменен альтернативным символом в контекстах, отличных отs
(замещающей) команды - но в этом случае его необходимо экранировать в первый раз, например, когдаsed '/foo/d'
(удаление соответствий строкfoo
) становитсяsed '\#foo#d'