Что означает символ # в: / bin / sed -e 's # abc # zzz # g'?

Ответы:

14

Это разделитель, точно так "/"же, как и 's/abc/zzz/g'.

это означает, что поиск по «abc» заменяет его на «zzz», с глобальным флагом, означает, что делает это для всех «abc» в строке, а не только для первого.

Вы также можете использовать альтернативный разделитель для адреса шаблона, но в этом случае вам нужно экранировать его для правильной интерпретации:

sed -r '\#abc#p'
Ravexina
источник
24

Это разделитель или разделитель. Наиболее часто используемый, /как в

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
Занна
источник
Возможно, стоит отметить, что, по крайней мере, в GNU sed он /может быть заменен альтернативным символом в контекстах, отличных от s(замещающей) команды - но в этом случае его необходимо экранировать в первый раз, например, когда sed '/foo/d'(удаление соответствий строк foo) становитсяsed '\#foo#d'
steeldriver
@steeldriver действительно! - Я видел, что Равексина добавил это к своему ответу, так что я, возможно, покину свой :)
Zanna
1
Не важно, содержит ли поток символ разделителя. Важно то, содержит ли строка поиска или строка замены символ-разделитель.
Касперд
@ kasperd о да, правда. Я немного отредактировал :)
Zanna
Ответ @ Занны ближе к делу: первый символ после команды "s" определяет разделитель, который используется в этой команде. Вы можете использовать любой символ здесь. sbabebделает так же, как s/a/e/.
rexkogitans