Gibt es einen Befehl zum Schneiden, der auf einem Wort basiert, z.
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
Ich möchte die Ausgabe als:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
Wie nähere ich mich?
Antworten:
Ich schlage vor:
Ausgabe:
FS
enthält Ihr Trennzeichen "ABCD". "ABCD" ist eine Regex.quelle
awk
kann die Arbeit erledigen, wenn Sie-F
flag mit dem Wort versehen, das Sie verwenden möchten:In Ihrem speziellen Fall wäre das:
Nach Ihrem Beispiel zu urteilen, versuchen Sie nur, Inhalte zu drucken, um danach
ABCD
alles zu löschen. Dies ist auch eine Option:quelle
awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
.sed
Ausführung:Quelle: /unix/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file
quelle
grep
Lösung:Der reguläre Ausdruck stimmt mit jeder Zeile überein, die
^
mit einem beliebigen Zeichen beginnt, das.
mehrmals wiederholt wird,*
und mit der Zeichenfolge endet.ABCD.
Der Backslash\
entgeht der speziellen Bedeutung des Punkts.
am Ende.Die Option
-o
weist dengrep
Befehl an, nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Zeile zu drucken.quelle
cut
kann diesen Job selbst ausführen. Nicht basierend auf einem Wort, sondern basierend auf einem.
Trennzeichen.Verwenden :
Ausgabe
xargs
wird hier nur zum Anhängen.
am Ende der Zeichenfolge verwendetABCD
.quelle