Verwenden Sie sed, um eine ganze Zeile zu löschen, wenn sie nur eine bestimmte Nummer enthält

8

Ich habe eine txt-Datei

123
456
789
456
123456

Ich möchte bestimmte Zeichen aus der Datei löschen, z. B. (123). Ich habe es mit versucht

$ sed -i '/123/d' dummy.sh
$ vi dumm.txt
456
789
456

Im folgenden Befehl werden beim Ausführen beide Wörter ( 123und 123456) gelöscht, aber ich muss nur 123aus der Datei löschen

$ sed -i 's/123//g' dummy.sh
$ vi dumm.txt
456
789
456
456

Wenn ich den folgenden Befehl ausführe, 123wird der durch null ersetzt.

Kann jemand sagen, wie man eine ganze Zeile löscht, wenn sie nur eine bestimmte Nummer enthält?

Rak Kundra
quelle
2
Mit einem Wort - Anker
Stahlfahrer
Ich habe nicht verstanden, was Sie fragen?
Rak Kundra
1
Beachten Sie, dass es zwar vollkommen in Ordnung ist, sed für diese Aufgabe zu verwenden, grep jedoch das Werkzeug ist, das speziell zum Anzeigen oder Ausblenden von Eingabezeilen erstellt wurde, die dem Muster entsprechen. In diesem Fall würde der folgende Befehl grep dasselbe tun: grep -E -v '^ 123 $' dumm.txt
Gnudiff
4
@Gnudiff Ich sehe keinen Vorteil, grepwenn Sie so verwenden. Aber es kann für einige Aufgaben aufgrund seiner Optionen überlegen sein:grep -xv 123
Philippos

Antworten:

19

Es ist unklar, ob Sie versuchen, eine ganze Zeile 123durch eine leere Zeile zu löschen oder durch eine leere Zeile zu ersetzen. Wie auch immer, fügen Sie Ihrem Muster einfach Anker am Anfang ^und Ende $der Linie hinzu:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line
jimmij
quelle
Ja, ich habe meine Antwort bekommen, danke :). Ich versuche hier die ganze Zeile zu löschen.
Rak Kundra