5 Stimmen

Präfix zu mehreren Dateien in Bash/OSX Terminal hinzufügen

Ich möchte gerne Text zu mehreren Dateien in bash hinzufügen. Ich habe diesen Beitrag gefunden, der sich mit dem Vorführen befasst: Vorführen zu einer Datei einzeiliges Shell?

Und ich kann alle Dateien, die ich verarbeiten muss, mit find finden:

find ./ -name "somename.txt"

Aber wie kombiniere ich die beiden mit einem Pipe?

9voto

Charlie Martin Punkte 106684

Sie haben mehrere Möglichkeiten. Am einfachsten ist wahrscheinlich sed:

find ./ -name somename.txt -exec sed -e '1i\
Mein neuer Text hier' {} \;

Es geht schneller, wenn Sie '2q' hinzufügen, um anzugeben, dass Sie fertig sind, nachdem Sie den Text vorangestellt haben, und es wird mit der -i-Flag in der Datei stattfinden:

find ./ -name somename.txt -exec sed -i .bak -e '2q;1i\
Mein neuer Text hier' {} \;

Um mehrere Zeilen voranzustellen, müssen Sie jede mit einem Backslash beenden.

Das lässt die Originaldateien mit einer .bak-Erweiterung zurück.

1voto

Johannes Weiss Punkte 49967
find . -name "somefiles-*-.txt" -type f | while read line; do  sed -i 'iDieser Text wird vorangestellt' -- "$line"; done

oder

find . -name "somefiles-*-.txt" -type f | xargs sed -i 'iWird vorangestellt' --

Das Beste (meiner Meinung nach):

find . -name "somefiles-*-.txt" -type f -exec sed -i 'iText, der vorangestellt wird (das "i" nicht entfernen)' -- '{}' \;

Danke für den fehlenden "-Hinweis. Ich habe die wichtigen -- hinzugefügt.

-1voto

mitchnull Punkte 5998
find . -name "somename.txt" | while read a; do prepend_stuff_to "$a" ; done

oder

find . -name "somename.txt -exec prepend_stuff_to "{}" \;

-1voto

Paul Tomblin Punkte 172816
find ./ -name "somename.txt" -print0 | xargs -0 -n 1 prepend_stuff_to

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X