Ich bin in der Linux-Befehlszeile und habe eine Datei mit
127.0.0.1
128.0.0.0
121.121.33.111
Ich will
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Ich erinnere mich, dass meine Kollegen sed dafür verwendeten, aber nach dem Lesen des sed-Handbuchs immer noch nicht klar, wie es in der Befehlszeile gemacht werden soll.
Antworten:
Sie könnten versuchen, etwas zu verwenden wie:
Vorausgesetzt, Ihr Dateiformat entspricht genau dem, was Sie in Ihrer Frage beschrieben haben.
Der
s///
Ersetzungsbefehl stimmt mit dem Ende jeder Zeile in Ihrer Datei überein ( findet es ) (unter Verwendung des$
Zeichens) und hängt das Ende an das Ende jeder Zeile an ( ersetzt es ):80
. Dieips.txt
Datei ist Ihre Eingabedatei ... undnew-ips.txt
Ihre neu erstellte Datei ( das Endergebnis Ihrer Änderungen ).Wenn Sie eine Liste von IP-Nummern haben, an die bereits Portnummern angehängt sind (wie von Vlad angegeben und von aragaer angegeben ), können Sie Folgendes versuchen:
Wenn Ihre Eingabedatei beispielsweise so aussieht (beachten Sie Folgendes
:80
) :Das Endergebnis würde ungefähr so aussehen:
quelle
s///
vorher ein anderes Sed ausführen , um alle Portnummern am Ende jeder Zeile herauszunehmen.sed '/:[0-9]*$/ ! s/$/:80/'
:80
wird diese am Anfang der folgenden Zeile hinzugefügt. Verwenden Siedos2unix
bei Bedarf zuerst die Datei.Wenn Sie Text am Ende jeder Zeile direkt (in derselben Datei) hinzufügen möchten, können Sie
-i
Parameter verwenden, zum Beispiel:Die
-i
Option ist jedoch eine nicht standardmäßige Unix-Erweiterung und möglicherweise nicht auf allen Betriebssystemen verfügbar.Sie können also in Betracht ziehen, Folgendes zu verwenden
ex
(wasvi -e
/ entsprichtvim -e
):Dies wird
:80
zu jeder Zeile hinzugefügt , aber manchmal kann es an leere Zeilen angehängt werden.Eine bessere Methode ist es, zu überprüfen, ob die Zeile tatsächlich eine Zahl enthält, und diese dann anzuhängen, zum Beispiel:
Wenn die Datei ein komplexeres Format hat, sollten Sie stattdessen den richtigen regulären Ausdruck verwenden
[0-9]
.quelle
Prägnante Version des Befehls sed :
Erläuterung:
sed
s tream ed itor-i
i n-place (Datei an Ort und Stelle bearbeiten)s
s Substitutionsbefehl/replacement_from_reg_exp/replacement_to_text/
Aussage$
stimmt mit dem Zeilenende überein ( replace_from_reg_exp ):80
Text, den Sie am Ende jeder Zeile hinzufügen möchten ( replace_to_text )file.txt
der Dateinamequelle
quelle
Suchen Sie mit einem Texteditor
^M
am Ende jeder Zeile nach (Steuerelement-M oder Wagenrücklauf). Sie müssen sie zuerst entfernen und dann den zusätzlichen Text am Ende der Zeile anhängen.quelle
Sie können dies auch mit der Rückreferenztechnik erreichen
Sie können auch mit awk wie diesem verwenden
quelle
sed -i 's / $ /, / g' foo.txt
Ich mache das ziemlich oft, um am Ende einer Ausgabe ein Komma einzufügen, damit ich es einfach kopieren und in ein Python-Array (oder Ihr Lieblings-Array) einfügen kann
quelle