Есть ли какая-нибудь команда на обрезку по слову, например:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
Я хочу вывод как:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
Как подойти?
Ответы:
Я предлагаю:
Вывод:
FS
содержит ваш разделитель "ABCD". «ABCD» является регулярным выражением.источник
awk
может сделать работу, если вы предоставите-F
флаг со словом, которое вы хотите использовать:В вашем конкретном случае это будет:
Судя по вашему примеру, вы только пытаетесь напечатать материал до,
ABCD
так что удаление всего после этого также вариант:источник
awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
.sed
версия:Источник: /unix/257514/how-to-delete-everything-after-a-termin-pattern-or-a-string-in-a-file
источник
grep
решение:Регулярное выражение будет соответствовать каждой строке, которая начинается
^
с любого символа,.
повторяющегося несколько раз*
и заканчивается строкойABCD.
. Обратная косая черта\
экранирует специальное значение точки.
в конце.Опция
-o
заставитgrep
команду печатать только совпадающие (непустые) части совпадающей строки.источник
cut
может сам выполнить эту работу. Не на основе слова, но на основе.
разделителя.Используйте:
Вывод
xargs
используется здесь только для добавления.
в конце строкиABCD
.источник