Was Unix-Befehl können wir einen Text zu einer bestimmten Zeile in einer Datei verwenden, um anhängen?
Frage
Kennt jemand eine Reihe von Unix-Befehlen, die ermöglicht jemand einen Text an das Ende einer bestimmten Zeile in einer Datei anhängen?
zB
Zeile 1
Zeile 2
Zeile 3
Zeile 4
Ich wünsche 3 den Text „zusätzliche Informationen“ zu Zeile anhängen, so dass die Datei nun wie folgt aussehen:
Zeile 1
Zeile 2
Zeile 3, zusätzliche Informationen
Zeile 4
Lösung
Perl:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$. ist die Zeilennummer
Andere Tipps
in awk es ist:
awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
richtigen sed-Version:
sed -e '3s/$/, Extra Information/' -i myfile
Hier ist eine Version mit tragbarem sed
(ohne Option -i):
sed '3s/$/Hello World/' myfile
Beachten Sie, dass myfile
nicht verändert, so dass Sie aus möglichen Fehlern erholen kann.
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile
Der Teil vor den Klammern ist die Bedingung : Wenn wir in Zeile 3 sind, fügen wir einen Text. Wenn Klammern weggelassen werden, ist die Standardaktion nur $0
ausdrucken. Umleiten in eine neue Datei oder ein Rohr in ein anderes Programm als angemessen. Sie können nicht auf die gleiche Datei umleiten Sie gerade lesen. Eine gemeinsame Abhilfe ist in eine neue Datei, und verschieben Sie dann über umleiten, wenn der Befehl erfolgreich war:
somecommand > oldfile.tmp && mv oldfile.tmp oldfile
sed -e "s/^Line 3/\0, extra info/" -i text.txt
Wenn Sie die zusätzlichen Informationen wollen nur eine Zeile angehängt werden, eine des sed / awk Einzeiler tun wird.
Wenn Sie etwas zu (fast) anhängen wollen jede Zeile in der Datei, sollten Sie eine zweite Datei mit den zusätzlichen Informationen für jede Zeile erstellen und paste
verwenden:
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4