Ich habe zwei Dateien erstellt:
echo -e "1\n2\n3\n4\n5" > 123.txt
echo -e "a\nb\nc\nd\ne" > abc.txt
Ich möchte die Datei 123.txt
mit folgendem Inhalt erhalten:
1
2
3
b
c
d
4
5
Mit anderen Worten, fügen Sie die Zeilen mit den Nummern 2 bis 4 abc.txt
der Datei 123.txt
nach der dritten Zeile in die Datei ein .
Ich habe die vielen ähnlichen Fragen hier geprüft, aber keine passende Antwort gefunden. Trotzdem habe ich die Zeilen bekommen:
sed -n '2,4p' abc.txt
und fügen Sie nach der dritten Zeile Text in die Datei ein:
sed -i '3a\mytext' 123.txt
Wie mache ich das mit dem vorherigen Befehl stdout oder / und einem sed
/ awk
single Befehl?
text-processing
sed
awk
Apostel
quelle
quelle
head -n +3 123.txt > tmp && cat abc.txt >> tmp && tail -n +2 123.txt >> tmp && mv tmp 123.txt
head -3 123.txt > tmp && tail -4 abc.txt | head -3 >> tmp && tail -2 123.txt >> tmp && mv tmp 123.txt
Antworten:
Wenn Ihr System über die GNU-Version von verfügt
sed
, können Sie denr
Befehl GNU-Erweiterung verwenden :Zum Beispiel,
quelle
r
Befehl befindet sich in POSIX. Das einzige, was nicht POSIX ist (aber auch auf Nicht-GNU-Systemen üblich ist), ist der sed-Teil/dev/stdin
. Wenn Sie anstelle einer Befehlsersetzung eine Pipe verwenden, ist Ihr Shell-Snippet POSIX, abgesehen von den vorhandenen Anforderungen/dev/stdin
.Mit
awk
undsed
:quelle
Mit
sed
können Sie mit demr
Befehl eine ganze Datei einfügen. Um einen Teil einer Datei einzufügen, extrahieren Sie diesen Teil und leiten Sie ihn als Eingabe an weitersed
. Sie könnensed
auch die Extraktion verwenden.Mit
awk
können Sie eine Datei lesen und in der Mitte zu einer anderen Datei wechseln.Sie können auch die Teile der Dateien verwenden
head
undtail
extrahieren, die Sie kombinieren möchten.Sie können den
head
+tail
Ansatz mit kombinierensed
. Bei großen Dateien ist dies wahrscheinlich die schnellste.Beachten Sie, dass alle diese Ansätze in eine temporäre Datei schreiben, in die verschoben wird
123.txt
(auch die verwendeten Ansätzesed -i
, dased -i
dies unter der Haube geschieht).quelle
In-Place-Bearbeitung mit
ed
undsed
(an der Bash-Eingabeaufforderung):quelle