como usar o comando sed para pesquisar string com o caractere “/” e substituí-la por alguma outra string?

0

Eu executei o comando:

sed 's/http:\/\//www/' filename

Na saída, este comando não substituiu "http: //" por "www" por quê?

e como alterar o delimitador no comando sed ?

    
por Akshay Patel 18.04.2015 / 22:54

2 respostas

1

Seu comando original está correto, desde que você queira substituir apenas a primeira ocorrência de http:// da linha com www :

$ cat file.txt 
foo http:// bar http:// spam
egg http:// test http://

$ sed 's/http:\/\//www/' file.txt 
foo www bar http:// spam
egg www test http://

Agora, como você deseja substituir todas as ocorrências de http:// por www , basta adicionar o modificador g no final:

$ sed 's/http:\/\//www/g' file.txt 
foo www bar www spam
egg www test www

Se você quiser definir um caractere diferente de / como delimitador, poderá escolher um caractere sem significado especial para sed e mais fácil de implementar no caso de teste. sublinhado ( _ ) será uma boa escolha neste caso:

$ sed 's_http://_www_g' file.txt 
foo www bar www spam
egg www test www

Se você quiser modificar o arquivo original com o conteúdo alterado, precisará da opção -i para editar o arquivo:

$ sed -i 's_http://_www_g' file.txt

Se você quiser fazer um backup do arquivo original ao mesmo tempo:

$ sed -i.bak 's_http://_www_g' file.txt

Após essa operação, o arquivo original será mantido como file.txt.bak e o arquivo modificado como file.txt .

    
por heemayl 18.04.2015 / 23:18
0

Isso não substituirá o conteúdo do arquivo existente, você precisará redirecionar a saída para um arquivo.

sed 's/http:\/\//www/' filename > filename.new

ou usando a opção -i,

sed -i.bak 's/http:\/\//www/' filename

Isso fará uma cópia com a extensão .bak do arquivo e, em seguida, substituirá o original pela saída do comando sed .

Além disso, isso também deixará você sem um . entre o domínio, pode querer soltar . depois de www.

EDITAR: Quanto à questão delimitadora, por favor, verifique isso. Exemplos são dados,

De: using-different-delimiters-in-sed

Basicamente, o sed toma o que segue o "s" como separador.

sed 's_/a/b/c/_/d/e/f/_'

Neste exemplo _ é o delimitador.

    
por Sinn3d 18.04.2015 / 23:12