Есть ли какая-либо команда обрезки, основанная на слове, например:
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.
Как подойти?
Я предлагаю:
awk -F 'ABCD' '{print $1 FS "."}' file
Вывод:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
FS
содержит ваш разделитель «ABCD». «ABCD» является регулярным выражением.
sed
версия:
sed 's/ABCD.*/ABCD./' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
cut
сам может выполнить эту работу. Не на основе слова, но на основе .
разделителя.
Использование:
cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
Выход
rooney@bond-pc:~$ cat input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
rooney@bond-pc:~$
rooney@bond-pc:~$ cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
xargs
используется здесь только для добавления .
в конце строки ABCD
.
grep
решение:
grep -o '^.*ABCD\.' input.txt
Регулярное выражение будет соответствовать каждой строке, которая начинается ^
любым символом .
, повторяется несколько раз *
и заканчивается строкой ABCD.
Обратная косая черта \
выходит за пределы специального значения точки .
в конце.
Опция -o
сообщит команде grep
печатать только совпадающие (непустые) части совпадающей строки.
awk
может сделать задание, если Вы обеспечиваете -F
флаг со словом, которое Вы хотите использовать:
$ awk -F 'test' '{print $1;print $2}' <<< "onetesttwotest"
one
two
В Вашем особом случае, который был бы:
$ awk -F 'ABCD' '{print $1,FS}' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD
Судя по Вашему примеру, Вы только пытаетесь распечатать материал до ABCD
так удаление всего после этого является также опцией:
$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.