Was Unix-Befehl können wir einen Text zu einer bestimmten Zeile in einer Datei verwenden, um anhängen?

StackOverflow https://stackoverflow.com/questions/602921

  •  03-07-2019
  •  | 
  •  

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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top