Con la ayuda del número de línea, reemplace una línea completa con otra línea que contenga la ruta del archivo

Con la ayuda del número de línea, reemplace una línea completa con otra línea que contenga la ruta del archivo

¿Cómo reemplazo Old_String con New_String en un archivo?

Cadena_antigua:

$resultado = $cliente->updateInventory("UpdateInventory.xml");
Nueva_cadena:
$resultado = $cliente->updateInventory("/Desktop/new/UpdateInventory.xml");

Old_String en el número de línea = 5 en un archivo llamado file1.txt

Lo que probé:

sed '5s/.*/'$resultado = $cliente->updateInventory("/Desktop/new/UpdateInventory.xml");'/' file1.txt

Respuesta1

Puede utilizar el siguiente comando para lograr lo mismo

sed "5s:.*:'$'result = '$'client->updateInventory('/Desktop/new/UpdateInventory.xml');:g" filename | sed "s:'$':$:g" | tr "'" '"'

Respuesta2

Elimine las comillas simples internas. Terminan con los externos, por lo que $resultse expandirán y sedprobablemente se quejarán de un scomando inacabado.

En su lugar, utilice un delimitador diferente para el scomando; puede utilizar casi cualquier cosa en lugar de la barra diagonal. Entonces

sed '5s_.*_$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml")‌​;_' file1.txt

es lo que quieres.

Respuesta3

Otra forma es utilizar cel comando que borra las líneas especificadas por la dirección.

$ seq 5 | sed '2c\
foobar'
1
foobar
3
4
5

$ # with GNU-sed, assuming \ is not first character
$ seq 5 | sed '2cfoobar'

Ambos comandos sy ctendrán problemas si la cadena de reemplazo tiene ciertos caracteres especiales, por ejemplo:

$ seq 3 | sed '2s/.*/abc&xyz/'
1
abc2xyz
3
$ seq 3 | sed '2cabc\tabc'
1
abc     abc
3

Una forma sólida de manejar esto es usar rel comando

$ echo 'foo&\t\n\1///\\xyz' > f1
$ seq 3 | sed -e '2rf1' -e '2d'
1
foo&\t\n\1///\\xyz
3

Respuesta4

Usando el comando awk también podemos lograr el resultado.


awk  ‘NR==5 {gsub(".*","$result = $client->updateInventory(/Desktop/new/UpdateInventory.xml);",$0);print $0}' filename| sed 's/(/&"/g' | sed 's/)/"&/g'

información relacionada