Frage

Im Anschluss an die Empfehlung des Bash-Hackers-Wikis, ich möchte Dateien mit ed bearbeiten.

Insbesondere möchte ich mit ed anstelle von sed Folgendes tun:

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

Ich sehe, dass ed kein opt wie seds -e hat, daher sind meines Wissens Pipes und io-Umleitungen die einzige Möglichkeit, nicht interaktiv damit zu arbeiten.

Wenn Sie also ed aus einem Bash-Skript verwenden, um dasselbe wie den obigen sed-Befehl zu tun, würde das folgendermaßen aussehen:

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

Oder

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

Soweit ich weiß, ist es jedoch unmöglich, Pipes oder Io-Umleitungen in die -exec von find einzubeziehen.

Vermisse ich etwas?Oder ist die einzige Möglichkeit, dies zu überwinden, die Verwendung von Schleifen?

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

Lösung

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

Und eine POSIX-Version:

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

Der Hauptgrund für die Verwendung von ed anstelle von sed -i besteht darin, dass ed Dateien bearbeitet, während sed -i Dateien überschreibt, und das ist ein Problem, wenn Sie Links haben, die Sie nicht zerstören möchten.

Andere Tipps

Dieses Find & Ed-Snippet verfügt über einen Testmodus (damit Sie direkt vor einem tatsächlichen Massenersetzungsvorgang überprüfen können, ob Sie Ihre Regex erhalten haben):

Suchen und ersetzen durch Suchen und Bearbeiten

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

Fügen Sie den Befehl ed mit allen Umleitungen und „Here-Dokumenten“ in ein Shell-Skript ein und rufen Sie ihn über „find“ auf.

Aber ich muss fragen:Warum Ed?Was können Sie Ihrer Meinung nach mit ed machen, was Sie mit sed nicht machen können?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top