sed
และawk
เป็น supersets grep
มีสิ่งที่ง่ายต่อการทำอย่างใดอย่างหนึ่ง
grep foo
สามารถเขียนsed '/foo/!d'
หรือawk /foo/
พิจารณา แต่:
grep -i foo
จะต้องมีsed '/[fF][oO][oO]/!d'
ถ้าคุณต้องการที่จะต้องพิจารณาส่วนขยายที่ไม่ได้มาตรฐานเช่น sed '/foo/I!d'
GNU หรือกับawk
: awk 'tolower($0) ~ /foo/'
หรืออีกครั้งโดยใช้ส่วนขยายของ awk -v IGNORECASE=1 /foo/
GNU:
สิ่งต่าง ๆ เครื่องมือต่าง ๆ ดีและยุ่งยากกับเครื่องมืออื่น ๆ :
grep
grep
เป็นเครื่องมือง่าย ๆ แต่มีโหมดการทำงานเฉพาะทางที่ยากต่อการทำซ้ำด้วยawk
หรือsed
:
grep -i
สำหรับการจับคู่แบบตัวเล็กและตัวเล็ก (ดูด้านบน)
grep -Fe "$string"
สำหรับการค้นหาสตริงคงที่ ( export string; awk 'index($0, ENVIRON["string"])'
กับawk
, ไม่เทียบเท่าโดยตรงกับsed
)
- (ไม่ใช่มาตรฐาน)
grep -r
สำหรับการค้นหาแบบเรียกซ้ำ
- (ไม่ใช่แบบมาตรฐาน)
grep -P
/ pcregrep
สำหรับ regexps แบบ perl ( sed
การใช้งานบางอย่างมีการสนับสนุน regexp แบบ perl เหมือน แต่ไม่ใช่แบบที่สำคัญที่สุด)
- (ไม่ใช่มาตรฐาน)
grep -o
เพื่อส่งคืนส่วนที่จับคู่ (หลายบรรทัดawk
หรือsed
เพื่อทำเช่นเดียวกัน)
- (ไม่ใช่มาตรฐาน)
grep -A/B/C
เพื่อกลับบริบทรอบการแข่งขัน (เจ็บปวดอีกครั้งในการทำแบบเดียวกันกับsed
หรือawk
)
sed
s/foo/bar/
: sed
's s
คำสั่งมีคุณสมบัติที่ยากที่จะดำเนินการในawk
ที่ชอบ:
s/foo\(.*\)bar/\1/g
: การจับภาพ (แม้ว่า GNU awk มีgensub()
ส่วนขยายสำหรับสิ่งนั้น)
s/foo/bar/3
: แทนที่เหตุการณ์ที่ 3 ในแต่ละบรรทัด
- (ไม่ใช่แบบมาตรฐาน): การแก้ไขไฟล์แบบแทนที่ (แม้ว่า GNU จะรองรับ
awk
แล้วในตอนนี้)
awk
awk
เป็นคุณลักษณะที่รวยที่สุดในสาม
- ดีสำหรับการจัดการกับตัวเลข
- เหมาะสำหรับจัดการกับอินพุตที่จัดรูปแบบในคอลัมน์
- เหมาะสำหรับการแยกและรวมข้อมูลจากแหล่งต่าง ๆ พร้อมอาเรย์แบบเชื่อมโยง
Perl
perl
ในฐานะที่เป็นเครื่องมือสกัดและรายงานที่ใช้งานได้จริงมีประโยชน์ที่สุด นั่นคือสิ่งที่มันถูกออกแบบมาในตอนแรกสำหรับ (เป็นเครื่องมือที่ทำให้sed
/ awk
ล้าสมัยทั้งหมด)
การเรียนรู้ที่perl
จะทำการประมวลผลข้อความจะให้ประโยชน์อย่างจริงจัง ฉันขอแนะนำให้ใช้เวลากับมันแม้กระทั่งก่อนที่จะดูsed
คำสั่งทั่วไปที่น้อยกว่าเช่น
ประสิทธิภาพ
ตามกฎของหัวแม่มือเครื่องมือพิเศษที่มีประสิทธิภาพมากที่สุดคือที่งาน แต่นั่นก็ขึ้นอยู่กับการนำไปปฏิบัติงานและปัจจัยอื่น ๆ อีกหลายอย่างและประสิทธิภาพอาจมีการแลกเปลี่ยนที่อาจต้องพิจารณา
ตัวอย่างเช่นมีบางส่วนgrep
หรือsed
การนำไปใช้งานที่รวดเร็วมาก แต่สำหรับอินสแตนซ์เหล่านี้ไม่สนับสนุนอักขระหลายไบต์ดังนั้นสามารถทำงานได้อย่างถูกต้องกับข้อความภาษาอังกฤษสหรัฐอเมริกาในโลแคลหลายไบต์ หรือพวกมันเร็วเพราะมันทำงานบนบัฟเฟอร์ที่มีความยาวคงที่และไม่สามารถทำงานกับอินพุตโดยพลการ ...