Вырезать команду со словом в качестве разделителя

Есть ли какая-либо команда обрезки, основанная на слове, например:

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.

Как подойти?

10
задан 13 December 2017 в 07:13

5 ответов

Я предлагаю:

awk -F 'ABCD' '{print $1 FS "."}' file

Вывод:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

FS содержит ваш разделитель «ABCD». «ABCD» является регулярным выражением.

13
ответ дан 13 December 2017 в 07:13
  • 1
    Спасибо за Ваш ответ. Вторая ссылка довольно интересна, но первая doesn' t содержат драйвер для моего принтера. Обратите внимание, что HL-6 является моделью самостоятельно. Это не имеет никакого отношения к более свежим моделям HL-6xxx! – Mr. Pixel 30 May 2012 в 00:39
  • 2
    Спасибо за Ваш ответ. Вторая ссылка довольно интересна, но первая doesn' t содержат драйвер для моего принтера. Обратите внимание, что HL-6 является моделью самостоятельно. Это не имеет никакого отношения к более свежим моделям HL-6xxx! – Mr. Pixel 30 May 2012 в 00:39
  • 3
    Спасибо за Ваш ответ. Вторая ссылка довольно интересна, но первая doesn' t содержат драйвер для моего принтера. Обратите внимание, что HL-6 является моделью самостоятельно. Это не имеет никакого отношения к более свежим моделям HL-6xxx! – Mr. Pixel 30 May 2012 в 00:39

sed версия:

sed 's/ABCD.*/ABCD./' input.txt
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Источник: https://unix.stackexchange.com/questions/257514/how-to-delete-everything-after-a-termin- паттерн или-а-строка-в-файл

4
ответ дан 13 December 2017 в 07:13

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.

2
ответ дан 13 December 2017 в 07:13
  • 1
    Это - супер ответ. Опция 1 перестала работать для меня с ошибкой Rhythmbox (ошибка или в Rhythmbox или в Gstreamer). Опция 2 работала обработка - и легче. – Synesso 26 May 2012 в 15:34
  • 2
    Это - супер ответ. Опция 1 перестала работать для меня с ошибкой Rhythmbox (ошибка или в Rhythmbox или в Gstreamer). Опция 2 работала обработка - и легче. – Synesso 26 May 2012 в 15:34
  • 3
    Это - супер ответ. Опция 1 перестала работать для меня с ошибкой Rhythmbox (ошибка или в Rhythmbox или в Gstreamer). Опция 2 работала обработка - и легче. – Synesso 26 May 2012 в 15:34

grep решение:

grep -o '^.*ABCD\.' input.txt

Регулярное выражение будет соответствовать каждой строке, которая начинается ^ любым символом ., повторяется несколько раз * и заканчивается строкой ABCD. Обратная косая черта \ выходит за пределы специального значения точки . в конце.

Опция -o сообщит команде grep печатать только совпадающие (непустые) части совпадающей строки.

2
ответ дан 13 December 2017 в 07:13

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.
4
ответ дан 13 December 2017 в 07:13

Другие вопросы по тегам:

Похожие вопросы: