grep - ลบข้อความหลังจากโทเค็นตัวคั่น


12

ฉันมีไฟล์ที่ฉันต้องการกำจัดทุกอย่างหลังจากแรก;ในทุกบรรทัด

ดังนั้นไฟล์เช่นนี้:

sdfsdsdf;
fsdfsddf;sdfsd;

จะทำให้เกิดสิ่งนี้:

sdfsdsdf
fsdfsddf

เราได้ตรวจสอบและgrep sedฉันขอขอบคุณคำตอบที่รวมคำสั่งทั้งสองนี้

คำตอบ:


5

sed อาจจะง่ายและเร็วกว่า awk หรือ perl ในกรณีนี้:

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
มันซับซ้อนกว่าที่ควรจะเป็น! sed 's/;.*//'
Gilles 'หยุดชั่วร้าย'

ฉันขอแตกต่าง perl -pe 's /;.*//' some_file_name นั้นใช้งานง่ายและเร็วขึ้นถึง 1500% เมื่อใช้งานกับไฟล์ขนาดใหญ่
codehead

ฉันมีหลายระบบที่สามารถใช้งาน sed ได้ แต่ไม่มี perl ดังนั้นฉันขอแนะนำให้ใช้โซลูชันที่มีน้ำหนักเบาซึ่งเพียงพอ
dubiousjim

7

อีกตัวเลือกหนึ่งคือใช้cutคำสั่ง

cat a.file | cut -d';' -f1

9
แมวไร้ประโยชน์ของเรา

3

ฉันมักจะใช้awkสิ่งต่าง ๆ เช่นนี้:

cat a.file | awk -F=";" '{ print $1 }'

ที่จะนำแต่ละบรรทัดของไฟล์และพิมพ์กลุ่มแรกก่อนที่ตัวคั่น -F


7
catการใช้งานที่ไร้ประโยชน์ของ
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
เดนนิสที่สองที่นั่น และภายใต้ linux และ BSD นั้น -F = ";" ไม่ทำงานตามที่ตั้งใจ และคุณอาจต้องการเสนอราคาที่ $ 1 ด้วย: awk -F ";" '{print $ 1}' a.file
codehead

2

นี่คือวิธีการทำโดยใช้ GNU grep:

grep -Po "^[^;]+(?=;?)" filename

หากไม่มี Gnu grep: grep -Eo '^[^;]+;' filenameเกือบจะได้มันแค่พิมพ์ตัวละครตัวเดียวมากเกินไป grep -Eo '^[^;]+' filenameเกือบจะได้รับมันเกินไป แต่ก็ยังจะพิมพ์ฉบับสมบูรณ์ (ไม่ว่างเปล่า) ;เส้นที่ไม่ได้ใด ๆ
dubiousjim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.