Wie Nosid sagte, können Sie die Option -i
verwenden, um eine Datei an Ort und Stelle zu bearbeiten. Lesen Sie die Manpage in Ihrem Betriebssystem, um genau zu bestimmen, wie Sie -i
verwenden. Dann können Sie sed wickeln in ein wenig Shell-Skript zu identifizieren und wirken auf die Datei:
for this in foo*.txt; do
sed -i'' -e 'your-sed-script' "$this"
done
Das heißt, ich bin nicht sicher, dass Ihr Einsatz Methode funktioniert, oder zumindest zuverlässig arbeiten. Ich habe in FreeBSD und OS X getestet, und es hat überhaupt nicht funktioniert. Meine normale Strategie zum Einfügen von Zeilen ist stattdessen awk. So (zum Beispiel):
for this in foo*.txt; do
awk '/MYWORD/{print "Extra line of text goes here."} 1' "$this" > "$this.$$"
mv "$this.$$" "$this"
done
Die awk Linie sucht hier/myWord/(einem erweiterten regulären Ausdruck, während sed
standardmäßig grundlegende reguläre Ausdrücke). Wenn es gefunden wird, druckt es zuerst den "Extra" -Text. Dann wird die "1" als "wahr" ausgewertet, die auch die aktuelle Zeile druckt. Der Effekt ist, den Text "Extra" in die Zeile vor MYWORD einzufügen.
Beachten Sie, dass dies kein gutes Skript ist. Es ist verschwenderisch, Rohrleitungen und umbenennen Dateien, die nicht geändert wurden. Sie könnten es verbessern, indem Sie die temporäre Datei "mv" wählen, abhängig von einem Exit-Wert von awk, oder Sie könnten cmp
verwenden, um festzustellen, ob die Datei geändert wurde, dann übrig gebliebene temporäre Dateien usw. ... Aber es bringt den Punkt herüber .
Sie sagen, dass Ihr Beispielcode tatsächlich * in einer einzigen Datei * funktioniert *? – Graham