O que o caractere # significa em: / bin / sed -e's # abc # zzz # g '?

10

O que o #personagem significa nesta linha:

/bin/sed -e 's#abc#zzz#g'
Khalith Basha
fonte

Respostas:

14

É um separador, assim como "/"é o mesmo que 's/abc/zzz/g'.

significa procurar por "abc" substitua-o por "zzz", com bandeira global, significa fazê-lo para todos os "abc" na linha, não apenas o primeiro.

Você também pode usar um separador alternativo para um endereço de padrão, mas nesse caso, você precisa escapá-lo para que seja interpretado corretamente:

sed -r '\#abc#p'
Ravexina
fonte
24

É um delimitador ou separador. O mais usado é /como em

sed 's/old/new/' file

Mas o sed terá o primeiro caractere após o (s) comando (s) como delimitador. Você pode usar qualquer caractere conveniente, por exemplo ...

sed 's%old%new%' file

Isso é muito útil se o arquivo contiver /(ou outros caracteres de delimitação convencionais). Você pode escolher como separador um caractere que você sabe que não precisará expressar em sua sedexpressão, poupando-lhe muitas fugas irritantes.

Digamos que você queira substituir

/ubuntu//questions

com

/ubuntu//posts

Você poderia usar

sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file

Mas é melhor usar

sed 's|/ubuntu//questions|/ubuntu//posts|' file
Zanna
fonte
Pode ser interessante notar que, pelo menos no GNU sed, /pode ser substituído por um caractere alternativo em contextos diferentes do scomando (substitute) - mas nesse caso ele precisa ser escapado na primeira vez, por exemplo, sed '/foo/d'(excluir linhas correspondentes foo) se tornased '\#foo#d'
steeldriver
@steeldriver de fato! - serra I que Ravexina acrescentou que a sua resposta, então eu talvez deixar o meu :)
Zanna
1
Não é importante se o fluxo contém o caractere separador. O importante é se a sequência de pesquisa ou de substituição contém o caractere separador.
kasperd
@kasperd oh sim, é verdade. Eu editei um pouco :)
Zanna
@ A resposta de Zanna é mais direta: o primeiro caractere após o comando "s" determina o separador usado neste comando. Você pode usar qualquer personagem aqui. sbabebfaz o mesmo que s/a/e/.
Rexkogitans