ตัดคำสั่งด้วยคำเป็นตัวคั่น


10

มีคำสั่งตัดให้ตัดตามคำเช่น:

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
คำใดที่คุณหมายถึง
Cyrus

ABCD เป็นคำที่ฉันต้องการใช้เป็นตัวคั่น และนี่คือบันทึกและเช่นเดียวกับ ABCD ฉันมีคำหลักอื่นเช่นกัน ฉันต้องการวิธีการทั่วไป
Anony

คำตอบ:


16

ฉันแนะนำ:

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

เอาท์พุท:

171212 16082784 6264 XXX xxxxxxxx ธุรกรรม XXXXX abend ABCD

FSมีตัวคั่น "ABCD" ของคุณ "ABCD" เป็น regex


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 ต้องอยู่ที่นั่น
Anony

awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'ผมขอแนะนำให้
ของหวาน

4

sed รุ่น:

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

ที่มา: /unix/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file


ฉันเปลี่ยนมัน แต่มันจะสร้างความแตกต่างหรือไม่?

มันจะยังคงใช้งานได้ - แค่ชี้ให้เห็นว่าไม่จำเป็น
ขับเหล็ก

2

grep สารละลาย:

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

นิพจน์ทั่วไปจะจับคู่กับแต่ละบรรทัดที่ขึ้นต้น^ด้วยอักขระ.ซ้ำ ๆ จำนวนครั้ง*และลงท้ายด้วยสตริงABCD.เครื่องหมายแบ็กสแลชจะ\หนีความหมายพิเศษของจุด.ที่ท้าย

ตัวเลือก-oจะบอกให้grepคำสั่งพิมพ์เฉพาะส่วนที่จับคู่ (ไม่ว่าง) ของบรรทัดที่ตรงกัน


2

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เท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.