![Wie finde ich ein Wort in einer Datei und füge zwei Zeilen darunter Text ein?](https://rvso.com/image/97225/Wie%20finde%20ich%20ein%20Wort%20in%20einer%20Datei%20und%20f%C3%BCge%20zwei%20Zeilen%20darunter%20Text%20ein%3F.png)
Ich habe eine Datei, in der ich ein Schlüsselwort suchen und zwei Zeilen weiter unten Text eingeben möchte.
Nehmen wir zum Beispiel an, meine Datei enthält die folgenden Wörter
the
cow
goes
moo
Ich möchte in der Lage sein, das Wort „Kuh“ zu finden und den Text „yay“ zwei Zeilen unter dem Wort „Kuh“ in die Datei einzufügen.
the
cow
goes
moo
yay
Ich glaube, damit wäre die Sache erledigt, sed
aber ich bekomme es nicht zum Laufen.
Jede Hilfe wird sehr geschätzt.
Antwort1
$ cat ip.txt
the
cow
goes
moo
$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt
the
cow
goes
moo
yay
N;N;
Holen Sie sich die nächsten beiden Zeilens/$/\nyay/
eine weitere Zeile hinzufügen
Antwort2
Mit awk
:
awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
/cow/
Übereinstimmungencow
im Datensatz, und{print; getline; print; getline; print; print "yay"; next}
druckt dann die Zeile,getline
bringt uns die nächste Zeile, die auch gedruckt wird, dasselbe für die nächste, und dannyay
wird gedruckt, dann geht es zur nächsten Zeile (next
)1
(true) druckt den Rest der Zeilen als Standardaktion
Vorbehalt:
- Wenn zwischen dem zu suchenden Muster und dem EOF weniger als zwei Zeilen liegen, wird die letzte Zeile ab dem Muster wiederholt, sodass zwei Zeilen dazwischen entstehen.
Beispiel:
% cat file.txt
the
cow
goes
moo
% awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1' file.txt
the
cow
goes
moo
yay
Antwort3
Anderesed
sed '/cow/! b;n;n;a\yay' file.txt
Andereawk
awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt
Antwort4
Mited
ed file << EOF
/cow/+2a
yay
.
,p
q
EOF
um die geänderte Ausgabe auszudrucken; oder
ed file << EOF
/cow/+2a
yay
.
wq
EOF
oder (als bash
Einzeiler)
printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file
um die Änderungen an Ort und Stelle zu schreiben.