Comando ed en Unix

Siento molestarte otra vez, pero estoy algo atascado. He estado viendo como funciona el ed y te adelanto que los comandos grep, egrep y fgrep ya los conozco a fondo. Mi problema es que ahora se como editar un fichero y reemplazar ocurrencias (primero te posicionas en la linea con /ocurrencia, y una vez que estas allí, reemplazas con la orden s/ocurrencia/texto_nuevo). Hasta ahí bien. Sales guardando con w y ya esta. Lo que pasa es que para hacer un recorrido global de un fichero, imagino que habrá que procesar linea a linea y mirar en cada una si existe la ocurrencia. Esto no se hacerlo con un script, pues me da errores. Debe tener relación con aquello que me has contado del envío de teclas. Por favor, ¿puedes informarme un poco más de como se envían esas teclas?

1 Respuesta

Respuesta
1
Juan, el comando ed te permite las mismas ventajas que el editor vi de UNIX, por lo tanto puedes enviar la secuencia de teclas tal como si las estuvieras ejecutando desde el editor.
El comando que necesitas es este:
1,$s/cadena a sustituir/Nueva Cadena/g
Donde:
1,$ (Significa desde la linea 1 hasta el final)
/G (Significa que busque todas las ocurrencias en todo el texto de cada linea y en todo el archivo)
Esto te servirá seguramente para lo que quieres.
Suerte y saludos.
Ya, ggutierrez, y lo entiendo y lo hago y funciona, pero manualmente. No se si es que soy gilipollas, pero cuando meto estas ordenes en mi script, no funciona.
Yo tengo:
Echo principio de script
ls *.c|while read linea
do
ed $linea 1,$s/a_sustituir/sustituto/g w q
done
echo final del script
Y esto se supone que debe cambiar todos los .c del directorio, pero algo se me escapa en la sintaxis, y no se como ponerlo.
No debes colocar todas las secuencias de teclas en una sola línea, es decir, debes separar cada parte del script.
Ejemplo:
1,$s/a_sustituir/sustitoto/g
w
q
Es así como funciona.
Disculpa olvidé dos aspectos muy importantes en este tipo de shell.
Primero, esto se hace desde un script debes tener manera de poder indicarle donde finaliza la secuencia de comandos.
Segundo, la utilización de caracteres especiales como el $ afectan el shel ya que son interpretados por el contexto del editor, para ello se le debe colocar una secuencia de escape que neutralice su significado este es \.
Ambos aspectos se solucionan así.
En el script colocar lo siguiente:
ed $arch << EOF
1,\$s/a sustituir/sustituto
w
q
EOF
Esto definitivamente te debe funcionar.
OK. Funciona estupendamente. Realmente había hecho antes algo con EOF, pero no lo recordaba, muchas gracias. Te comentaré que, entretanto, he probado con el comando sed y me ha funcionado también muy bien (sed "s/a_reemplazar/sustituto/g" fichero >fichero.aux;mv fichero.aux fichero). Te agradezco mucho tu ayuda. Un saludo,
Juan Martínez

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas