Potong perintah dengan kata sebagai pembatas

10

Apakah ada perintah cut untuk memotong berdasarkan kata misalnya:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27

Saya ingin output sebagai:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Bagaimana cara mendekati?

Anony
sumber
1
Kata apa yang kamu maksud?
Cyrus
ABCD adalah kata yang ingin saya gunakan sebagai pembatas. Dan juga, ini adalah log, dan seperti ABCD, saya memiliki kata kunci lain juga. Saya ingin pendekatan secara umum
Anony

Jawaban:

16

Saya menyarankan:

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

Keluaran:

171212 16082784 6264 XXX xxxxxxxx Transaksi XXXXX abend ABCD.

FSberisi pembatas Anda "ABCD". "ABCD" adalah regex.

Cyrus
sumber
4

awkdapat melakukan pekerjaan jika Anda memberikan -Fbendera dengan kata yang ingin Anda gunakan:

$ awk -F 'test'  '{print $1;print $2}'  <<<  "onetesttwotest"                                                            
one
two

Dalam kasus khusus Anda, itu akan menjadi:

$ awk -F 'ABCD' '{print $1,FS}' input.txt                                                                                
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend  ABCD

Menilai dari contoh Anda, Anda hanya mencoba mencetak barang-barang hingga ABCDmenghapus semuanya setelah itu juga merupakan pilihan:

$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt                                                               
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.
Sergiy Kolodyazhnyy
sumber
Mereka juga ingin mempertahankan 'ABCD.'
Ya..ABCD harus ada di sana
Anony
Saya sarankan awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'.
hidangan penutup
2

grep larutan:

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

Ekspresi reguler akan cocok dengan setiap baris yang dimulai ^dengan karakter apa pun yang .diulang beberapa kali *dan berakhir dengan string. ABCD.Garis miring terbalik \lolos makna khusus dari titik .di akhir.

Opsi ini -oakan memberi tahu grepperintah untuk mencetak hanya bagian yang cocok (tidak kosong) dari garis yang cocok.

pa4080
sumber
2

cutitu sendiri dapat melakukan pekerjaan ini. Bukan berdasarkan kata, tetapi berdasarkan .pembatas.

Gunakan:

cut -f 1 -d '.' input.txt | xargs -I "%" echo %.

Keluaran

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.

xargsdigunakan di sini hanya untuk menambahkan .pada akhir string ABCD.

Rooney
sumber