Wie finde ich ein Wort in einer Datei und füge zwei Zeilen darunter Text ein?

Wie finde ich ein Wort in einer Datei und füge zwei Zeilen darunter Text ein?

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, sedaber 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 Zeilen
  • s/$/\nyay/eine weitere Zeile hinzufügen

Antwort2

Mit awk:

awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
  • /cow/Übereinstimmungen cowim Datensatz, und {print; getline; print; getline; print; print "yay"; next}druckt dann die Zeile, getlinebringt uns die nächste Zeile, die auch gedruckt wird, dasselbe für die nächste, und dann yaywird 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 bashEinzeiler)

printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file

um die Änderungen an Ort und Stelle zu schreiben.

verwandte Informationen