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การนำไปใช้งานที่รวดเร็วมาก แต่สำหรับอินสแตนซ์เหล่านี้ไม่สนับสนุนอักขระหลายไบต์ดังนั้นสามารถทำงานได้อย่างถูกต้องกับข้อความภาษาอังกฤษสหรัฐอเมริกาในโลแคลหลายไบต์ หรือพวกมันเร็วเพราะมันทำงานบนบัฟเฟอร์ที่มีความยาวคงที่และไม่สามารถทำงานกับอินพุตโดยพลการ ...