Domanda

Dopo la bash-hacker del wiki raccomandazione , voglio modificare i file utilizzando ed.

In particolare voglio fare quanto segue con Ed invece di sed:

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

Vedo che Ed non ha opt come -e di sed, in modo da quanto ne so, tubi e reindirizzamenti io sono l'unico modo per lavorare con esso in modo non interattivo.

Quindi, utilizzando ndr da uno script bash per fare lo stesso come sopra comando sed sarà simile:

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

o

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

Ma per quanto ne so non è possibile coinvolgere i tubi o reindirizzamenti io all'interno di find -exec.

mi manca qualcosa? o è l'unico modo per superare questo è di utilizzare i cicli?

for file in $(find . -type f -print); do ed $file <<<$'g/a/s//b/g\nw'; done;
È stato utile?

Soluzione

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

E una versione POSIX:

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

Il motivo principale per l'uso Ed oltre sed -i è che i file Modifiche ndr mentre sed file sovrascrive -i, e questo è un problema se vi capita di avere legami che non si desidera rompere.

Altri suggerimenti

Questo ritrovamento & Ed frammento dispone di una modalità di test (in modo da poter verificare che hai il tuo diritto espressione regolare prima di una massa acutal sostituire funzionamento):

Cerca e sostituirlo con find & Ed

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

Mettere il comando ed a tutte le redirezioni e "qui i documenti" in uno script di shell, e invocare che dal ritrovamento.

Ma devo chiedere: perché Ed? Cosa pensi che si può fare con Ed, che non si può fare con sed?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top