sustituir - sed reemplazar
''sed'': Cómo agregar una nueva línea después de la coincidencia de cadena+2 líneas (4)
Esto parece funcionar:
sed ''/^iface eth1/{N;N;s/$//ngateway 192.168.1.1/}'' input.txt
Agregue la opción -i
a sed
para guardar el resultado en input.txt
.
Me gustaría agregar una nueva línea después de la coincidencia de cadena + 2 líneas.
Aquí está mi archivo:
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1
allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
Quiero agregar ''gateway 192.168.1.1'' después de encontrar ''iface eth1'' + 2 líneas.
ejemplo: lo que necesito obtener después de ejecutar el comando sed
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 172.16.2.254
allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
gateway 192.168.1.1
iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
Sé cómo encontrar y mover 2 líneas después, agregar línea después de una cadena específica, etc., pero no combinar esta 2 operación. Steph
Una forma de usar sed
:
sed ''
/iface eth1/ {
n
n
a/gateway 192.168.1.1
}'' file
Usted pidió usar ''sed'' pero ''Kent'' está usando ''awk'', aquí hay un script sed que hace lo que quiere para su ejemplo. Para ser más generales, la línea 1 del script sed puede contener cualquier cadena que desee, y la línea 5 del script sed puede contener cualquier cadena que desee. Coloque la siguiente secuencia de comandos en un archivo, digamos x.sed, no agregue espacios ni pestañas.
/iface eth1/{
n
n
a/
gateway 192.168.1.1
}
Luego ejecútelo así en la línea de comando.
sed -f x.sed "myinputfile" > "myoutputfile"
si desea agregar una línea al final de ese bloque, intente esto:
awk -v RS="" -v ORS="/n/n" ''/iface eth1/{$0=$0"/ngateway 192.168.1.1"}1'' file
con tu archivo:
kent$ cat file
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1
allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0
kent$ awk -v RS="" -v ORS="/n/n" ''/iface eth1/{$0=$0"/ngateway 192.168.1.1"}1'' file
allow-hotplug eth0
auto eth0
iface eth0 inet static
address 172.16.2.245
netmask 255.255.254.0
gateway 192.168.1.1
allow-hotplug eth1
#auto eth1
iface eth1 inet static
address 192.168.0.240
netmask 255.255.255.0
gateway 192.168.1.1
iface eth2 inet static
address 192.168.2.240
netmask 255.255.255.0