it-swarm.com.de

Fügen Sie am Ende jeder Zeile Text hinzu

Ich bin auf der Linux-Kommandozeile und habe eine Datei mit

127.0.0.1
128.0.0.0
121.121.33.111

Ich möchte

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

Ich erinnere mich, dass meine Kollegen sed dafür verwendet haben, aber nach dem Lesen des sed-Handbuchs ist immer noch nicht klar, wie es auf der Kommandozeile zu tun ist.

74
user2275580

Sie könnten versuchen, etwas zu verwenden wie:

sed 's/$/:80/' ips.txt > new-ips.txt

Vorausgesetzt, Ihr Dateiformat entspricht dem, was Sie in Ihrer Frage beschrieben haben.

Das s/// Ersetzungsbefehl passt ( findet ) das Ende jeder Zeile in Ihrer Datei (mit dem $ Zeichen) und fügt dann ( an ) das :80 bis zum Ende jeder Zeile. Das ips.txt Datei ist Ihre Eingabedatei ... und new-ips.txt ist Ihre neu erstellte Datei ( das Endergebnis Ihrer Änderungen.


Wenn Sie eine Liste von IP-Nummern haben, an die zufällig bereits Portnummern angehängt sind (wie von Vlad und von aragaer angegeben), können Sie versuchen, etwas zu verwenden mögen:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt

Beispiel: Ihre Eingabedatei sah ungefähr so ​​aus: (beachten Sie das :80):

127.0.0.1
128.0.0.0:80
121.121.33.111

Das Endergebnis würde ungefähr so ​​aussehen:

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
117
summea

Wenn Sie Text am Ende jeder Zeile einfügen möchten (in derselben Datei), können Sie den Parameter -i Verwenden, zum Beispiel:

sed -i'.bak' 's/$/:80/' foo.txt

Die Option -i Ist jedoch keine standardmäßige Unix-Erweiterung und ist möglicherweise nicht auf allen Betriebssystemen verfügbar.

Sie können also erwägen, ex (das entspricht vi -e/vim -e) Zu verwenden:

ex +"%s/$/:80/g" -cwq foo.txt

das fügt jeder Zeile :80 hinzu, kann aber manchmal auch an leere Zeilen angehängt werden.

Eine bessere Methode ist es, zu überprüfen, ob die Zeile tatsächlich eine Zahl enthält, und sie dann anzuhängen, zum Beispiel:

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

Wenn die Datei ein komplexeres Format hat, sollten Sie anstelle von [0-9] Einen geeigneten regulären Ausdruck verwenden.

10
kenorb
sed 's/.*/&:80/'  abcd.txt >abcde.txt
10
sudhir

Kurze Version des sed Befehls:

sed -i s/$/:80/ file.txt

Erläuterung:

  • seds tream ed itor
    • -ii n-place (Datei an Ort und Stelle bearbeiten)
    • ss ubstitution Befehl
    • /replacement_from_reg_exp/replacement_to_text/ Aussage
    • $ entspricht dem Zeilenende ( replacement_from_reg_exp )
    • :80 Text, den Sie am Ende jeder Zeile hinzufügen möchten ( replacement_to_text )
  • file.txt der Dateiname
5
simhumileco

Suchen Sie mit einem Texteditor nach ^M (Strg-M oder Wagenrücklauf) am Ende jeder Zeile. Sie müssen diese zuerst entfernen und dann den zusätzlichen Text am Ende der Zeile anhängen.

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
1
John