%20nach%20einem%20Zeichenmuster%20(einschlie%C3%9Flich%20des%20Musters)%3F.png)
Im Grunde brauche ich das, was der OP dieser Frage bekommen hat, aber nicht wollte. Wie lösche ich alles nach einem bestimmten Muster oder einer Zeichenfolge in einer Datei?
Ich habe also folgende Daten erhalten:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
Ich möchte also alle Punkte (und Zahlen) nach dem Leerzeichen löschen.
Bisher habe ich versucht, den Befehl des OP dort zu verwenden, aber er hat nicht ganz so funktioniert wie erwartet, da er alles nach dem ersten Punkt löscht, auf den er stößt. Das bedeutet, dass auch der Punkt in den Daten der Sorte Somethinelse Inc. gelöscht wird.
Ich habe versucht, die erste (sed) Antwort auf diese Frage zum Laufen zu bringen, indem ich das erste .com durch drei Punkte und das zweite durch ein Leerzeichen ersetzt habe, aber das ist mir nicht gelungen. Dieses Mal wird alles nach dem ersten Leerzeichen gelöscht oder es bleiben drei Punkte übrig.
Die zweite Antwort (z. B. -sc ...) funktionierte wie vom OP gewünscht, ließ bei mir aber ein paar Punkte zurück, sodass ich auch damit kein Glück hatte.
Ich habe auch versucht, den Befehl aus dieser Antwort zu optimieren, aber auch das ist fehlgeschlagen.Wie kann ich aus einer Zeile alles bis zu einem Muster und alles nach einem anderen Muster löschen?
Antwort1
sed 's/ \.\..*$//' /path/to/file
sollte arbeiten:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
Antwort2
Eine andere, aber nicht elegante Lösung könnte sein:
cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file
Wo:
-E
Interpretieren Sie reguläre Ausdrücke als erweiterte (moderne) reguläre Ausdrücke[\.]{2,}
Übereinstimmung mit einem Punkt pro zwei oder mehr Vorkommen[0-9]
alle Ziffern abgleichens/expr//g
expr
bedeutet , so viel wie möglich durch nichts zu ersetzen (g)
Antwort3
Wie wäre es damit:
sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'
was bedeutet:
eins+zu+viele(\+)Punkte(\.)UND Null-zu-viele(*)Räume( )UND eins+zu+viele(\+) Ziffern([[:Ziffer:]])UND für den Fall, dass(*) Leerzeichen ([[:Raum:]])UND Ende dieser Zeile ($)
Getestet mit (Beachten Sie, dass ich in der 2. Zeile „…234“ und am Ende Tabulatoren/Leerzeichen eingefügt habe):
Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>
Und das Ergebnis:
xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something
An ...234 other one
Somethingelse Inc.
xb@dnxb:/tmp$