Pregunta

Tras la Bash-hackers de wiki recomendación , quiero editar archivos usando ed.

En particular, quiero hacer lo siguiente con Ed en lugar de sed:

find . -type f -exec sed -i -e 's/a/b/g' {} \;

veo que Ed no tiene opt como -e de sed, por lo que yo sé, tuberías y redirecciones io son la única manera de trabajar con él de forma no interactiva.

Por lo tanto, el uso de la D desde un script bash para hacer lo mismo que el anterior comando sed se vería así:

ed file_name <<<$'g/a/s//b/g\nw'

o

echo $'g/a/s//b/g\nw' | ed file_name

Pero por lo que sé que es imposible incluir tuberías o redirecciones io dentro del hallazgo -exec.

Do Me he perdido algo? o es la única manera de superar esto es a los bucles de uso?

for file in $(find . -type f -print); do ed $file <<<$'g/a/s//b/g\nw'; done;
¿Fue útil?

Solución

find . -type f -exec bash -c 'ed -s "$2" <<< "$1"' _ $'g/a/s//b/g\nw' {} \;

Y una versión POSIX:

find . -type f -exec sh -c 'printf "%s\n" "g/a/s//b/g" w | ed -s "$1"' _ {} \;

La razón principal para el uso de urgencias en detrimento sed -i es que los archivos ediciones ed mientras sed -i archivos sobreescribe, y eso es un problema si le sucede que tiene enlaces que no desea romper.

Otros consejos

Este hallazgo & Ed fragmento cuenta con un modo de prueba (para que pueda verificar que tienes a la derecha de expresiones regulares antes de una masa acutal operación de reemplazo):

Buscar y reemplazar con find & Ed

http://codesnippets.joyent.com/posts/show/2299

Ponga el comando ed con todos los cambios de dirección y "aquí documentos" en un script de shell, e invocar que a partir hallazgo.

Pero tengo que preguntar: ¿por qué ed? ¿Qué te parece que puede hacer con Ed que no se puede ver con sed?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top