una sustituir script salto reemplazar lineas linea insertar eliminar caracter añadir sed

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