sed / awk corresponden a la segunda ocurrencia de una expresión regular en un archivo, y reemplazan toda la línea.
Tratando de hacer que sed o awk hagan lo siguiente:
1) Buscar en el archivo.
2) Capturar una cadena + regex (remote_addrs.*)
3) Reemplazar toda la línea por algo diferente, por lo que “una línea que tiene” remote_addrs “y cualquier cosa después de ella” reemplazarla.
Archivo de ejemplo:
dog
cat
remote_addrs = 1.1.1.1
moose
remote_addrs = 2.2.2.2
woodchuck
Quiero que se cambie a esto:
Archivo de ejemplo:
dog
cat
remote_addrs = 1.1.1.1
moose
remote_addrs = 3.3.3.3
woodchuck
Intente usar lo siguiente:
sed -z ‘s/remote_addrs./remote_addrs\ =\ 3.3.3.3/2′ file
sed ‘:a;N;$!ba;s/remote_addrs./remote_addrs\ =\ 3.3.3.3/2′ file
pero sed se niega a reemplazar todo después de esa ocurrencia. Esto parece funcionar solo con una sola cadena.
Esto DEBE lograrse sin dar números de línea específicos, la posición de línea de “remote_addrs” debe ser variable.
davy.ai
Para lograr el resultado deseado usando awk, puedes intentar el siguiente comando:
Este comando buscará en el archivo y capturará cualquier línea que contenga la cadena “remote_addrs” seguida de un signo igual. Reemplazará toda la línea con “remote_addrs = 3.3.3.3” e imprimirá el archivo modificado. La función
sub
realiza la sustitución y el1
al final es una abreviatura deprint
, que imprimirá cada línea.Si prefieres utilizar sed, puedes modificar ligeramente tu comando original para lograr el resultado deseado:
Este comando buscará en el archivo y capturará cualquier línea que contenga la cadena “remote_addrs” seguida de un signo igual. Reemplazará toda la línea con “remote_addrs = 3.3.3.3”. La función
s
realiza la sustitución solo en las líneas coincidentes.