
Como substituo Old_String por New_String em um arquivo?
String_antiga:
$resultado = $client->updateInventory("UpdateInventory.xml");Nova_String:
$resultado = $client->updateInventory("/Desktop/new/UpdateInventory.xml");
Old_String na linha número = 5 em um arquivo chamado file1.txt
O que eu tentei:
sed '5s/.*/'$resultado = $client->updateInventory("/Desktop/new/UpdateInventory.xml");'/' arquivo1.txt
Responder1
Você pode usar o comando abaixo para obter o mesmo
sed "5s:.*:'$'result = '$'client->updateInventory('/Desktop/new/UpdateInventory.xml');:g" filename | sed "s:'$':$:g" | tr "'" '"'
Responder2
Remova as aspas simples internas. Eles encerram os externos, então $result
serão expandidos e sed
provavelmente reclamarão de um s
comando inacabado.
Em vez disso, use um delimitador diferente para o s
comando; você pode usar quase qualquer coisa em vez da barra. Então
sed '5s_.*_$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");_' file1.txt
é o que você quer.
Responder3
Outra maneira é usar c
o comando que limpa a(s) linha(s) especificada(s) pelo endereço
$ seq 5 | sed '2c\
foobar'
1
foobar
3
4
5
$ # with GNU-sed, assuming \ is not first character
$ seq 5 | sed '2cfoobar'
Os comandos s
e c
terão problemas se a string de substituição tiver certos caracteres especiais, por exemplo:
$ seq 3 | sed '2s/.*/abc&xyz/'
1
abc2xyz
3
$ seq 3 | sed '2cabc\tabc'
1
abc abc
3
Uma maneira robusta de lidar com isso é usar r
o comando
$ echo 'foo&\t\n\1///\\xyz' > f1
$ seq 3 | sed -e '2rf1' -e '2d'
1
foo&\t\n\1///\\xyz
3
Responder4
Usando o comando awk também podemos alcançar o resultado
awk ‘NR==5 {gsub(".*","$result = $client->updateInventory(/Desktop/new/UpdateInventory.xml);",$0);print $0}' filename| sed 's/(/&"/g' | sed 's/)/"&/g'