Czy istnieje jakieś polecenie cięcia do wycięcia na podstawie słowa, np .:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
Chcę wynik jako:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
Jak podejść?
Odpowiedzi:
Sugeruję:
Wynik:
FS
zawiera separator „ABCD”. „ABCD” to wyrażenie regularne.źródło
awk
może wykonać zadanie, jeśli podasz-F
flagę ze słowem, którego chcesz użyć:W twoim szczególnym przypadku byłoby to:
Sądząc z twojego przykładu, próbujesz tylko wydrukować rzeczy,
ABCD
więc usunięcie wszystkiego po tym jest również opcją:źródło
awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
.sed
wersja:Źródło: /unix/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file
źródło
grep
rozwiązanie:Wyrażenie regularne będzie pasować do każdej linii, która zaczyna
^
się dowolnym znakiem.
powtarzanym wielokrotnie*
i kończy się łańcuchemABCD.
. Odwrotny ukośnik nie\
ma specjalnego znaczenia kropki.
na końcu.Ta opcja
-o
spowoduje, żegrep
polecenie wydrukuje tylko pasujące (niepuste) części pasującej linii.źródło
cut
może sama wykonać tę pracę. Nie na podstawie słowa, ale na podstawie.
ogranicznika.Posługiwać się :
Wynik
xargs
służy tutaj tylko do dołączania.
na końcu łańcuchaABCD
.źródło