Вырезать команду со словом в качестве разделителя
Есть ли какая-нибудь команда на обрезку, основанная на слове, например:
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.
Как подойти?
5 ответов
Я предлагаю:
awk -F 'ABCD' '{print $1 FS "."}' file
Выход:
171212 16082784 6264 XXX xxxxxxxx Транзакция XXXXX и ABCD.
FS содержит ваш разделитель "ABCD". "ABCD" является регулярным выражением.
sed версия:
sed 's/ABCD.*/ABCD./' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
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.
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 команда для печати только совпадающих (непустых) частей совпадающей строки.