was macht der Befehl sed -e 's/\(~\).*\(~\)// mit einer Textdatei?

was macht der Befehl sed -e 's/\(~\).*\(~\)// mit einer Textdatei?

was macht der Befehl sed -e 's/\(~\).*\(~\)// mit einer Textdatei? Ich verstehe es nicht. Ich bin bei meiner Arbeit darauf gestoßen.

Antwort1

Der Befehl (wenn Sie am Ende ein fehlendes einfaches Anführungszeichen hinzufügen) druckt alle Zeilen der Datei auf dem Terminal aus, aber wenn ~in einer Zeile mindestens zwei (Tilde-)Zeichen stehen, ~wird das Bit zwischen dem ersten und dem letzten mithilfe eines Ersetzungsbefehls ( s) in entfernt sed.

Beispiel:

$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is  THE END

Die \(und \)sind jedoch nicht erforderlich (da im Ausdruck keine Rückverweise verwendet werden) und das -ekann auch weggelassen werden (da es nur einen Ausdruck gibt), sodass der Befehl äquivalent zu

sed 's/~.*~//' file

Es ist also nichtTunnichts an der Datei selbst, aber es liest und ändert den Inhalt der Datei und erzeugt einen verarbeiteten Text, den Sie dann mit einer Umleitung ( sed ... >newfile) in einer neuen Datei speichern können.


Ein Rückverweiskönntekann in diesem Befehl wie folgt verwendet werden:

sed 's/\(~\).*\1//' file

D. h., suchen Sie nach einem ~, dann nach einem anderen Text und dann nach dem gleichen Text, den wir in der ersten \(...\)Gruppe gefunden haben (eine Tilde). Dies spart jedoch weder Tipparbeit noch macht es den Befehl einfacher zu verwalten oder zu verstehen, es wäre also keine Verbesserung gegenüber sed 's/~.*~//' file.

verwandte Informationen