localizar e substituir por sed com barra em localizar e substituir cadeia

1

Eu quero alterar o arquivo /var/www com /home/lokesh/www com o comando sed

sed -i 's///var//www///home//lokesh//www/g' lks.php

mas isso dá erro

sed: couldn't open file ww///home//lokesh//www/g: No such file or directory
    
por LOKESH 17.07.2017 / 12:15

3 respostas

4

Não tenho certeza se você sabe, mas sed tem uma ótima característica, pois você não precisa usar um / como separador.

Então, seu exemplo poderia ser escrito como:

sed -i 's#/var/www#/home/lokesh/www#g' lks.php

Também não precisa ser um # , poderia ser qualquer caractere único. Por exemplo, usando um 3 como o separador:

echo "foo" | sed 's3foo3bar3g'
bar
    
por 17.07.2017 / 12:21
4

Você tentou usar algo como:

sed -i 's@/var/www@/home/lokesh/www@g' lks.php
    
por 17.07.2017 / 12:21
3

Você pode usar um caractere diferente para o delimitador, como outros apontaram, assim:

sed -i 's!pattern!replacement!g' /path/to/file

Mas, se não houver um caractere conveniente a ser usado em vez de / como delimitador, você também poderá excluir caracteres delimitadores incorporados em pattern e replacement , prefixando cada um deles com uma barra invertida \ . Veja um exemplo usando / como o delimitador que substitui /some/path por ../some/replacement :

sed -i 's/\/some\/path/..\/some\/replacement/g'

É mais difícil para os humanos lerem, então, geralmente, se é possível, é melhor usar um caractere diferente para o delimitador da seguinte forma:

sed -i 's!/some/path!../some/replacement!g'
    
por 17.07.2017 / 12:29

Tags