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


10

Чи є якась команда cut для вирізання на основі слова, наприклад:

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.

Як підходити?


1
Яке слово ви маєте на увазі?
Кіра

ABCD - це слово, яке я хочу використовувати як роздільник. А також, це журнал, і, як і ABCD, у мене теж є деякі інші ключові слова. Я хочу підходу взагалі
Anonymous

Відповіді:


16

Я пропоную:

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

Вихід:

171212 16082784 6264 XXX xxxxxxxx транзакція XXXXX abend ABCD.

FSмістить ваш роздільник "ABCD". "ABCD" - це регулярний вираз.


4

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.

Вони також хочуть зберегти "ABCD".

Так..ABCD повинен бути там
Анонім

Я пропоную awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'.
десерт


3

grep рішення:

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

Регулярний вираз буде відповідати кожному рядку, який починається ^з будь-якого символу, .повтореного кількість разів, *і закінчується рядком ABCD.Зворотна косої риски \уникає особливого значення точки .в кінці.

Цей параметр -oпідкаже grepкоманді друкувати лише відповідні (не порожні) частини відповідного рядка.


3

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.