คำสั่ง Pipe, Grep และ Sort ใน Linux/Unix พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

คำสั่ง pipe, grep และ sort ใน Linux และ Unix ใช้สำหรับเชื่อมต่อและกรองข้อความ: pipe ใช้สำหรับส่งเอาต์พutของคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่ง grep ใช้ค้นหารูปแบบ และ sort ใช้จัดเรียงบรรทัด ในขณะที่ filters ใช้สำหรับแปลงข้อมูลระหว่างคำสั่งเหล่านั้น

  • 🔗 ท่อ: สัญลักษณ์ท่อ | ใช้สำหรับส่งผ่านเอาต์พุตของคำสั่งหนึ่งไปเป็นอินพุตของคำสั่งถัดไป
  • 📄 การเรียกหา: คำสั่ง `cat` ที่เชื่อมต่อกับ `less`, `pg` หรือ `more` จะแสดงไฟล์ขนาดยาวทีละหน้าจอ
  • 🔍 เกรป: คำสั่ง grep ใช้ค้นหาไฟล์ที่มีบรรทัดตรงกับสตริงหรือรูปแบบที่กำหนด
  • 🎚️ ตัวเลือกของคำสั่ง grep: แฟล็กต่างๆ เช่น -v, -c, -n, -i และ -l ใช้สำหรับกลับค่า, นับจำนวน, แสดงตัวเลข, ไม่สนใจตัวพิมพ์ใหญ่เล็ก และแสดงรายการไฟล์
  • 🔤 เรียงลำดับ: คำสั่ง sort ใช้สำหรับเรียงลำดับบรรทัดของไฟล์ โดยมีตัวเลือก -r, -n และ -f สำหรับการเรียงลำดับแบบย้อนกลับ ตัวเลข และโดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก ตามลำดับ
  • 🧪 ตัวกรอง: คำสั่งกรองข้อมูล เช่น grep, sort, awk, sed และ wc จะประมวลผลข้อมูลขาเข้าที่ส่งผ่านทางไปป์ และสร้างข้อมูลขาออก
  • 🤖 ความช่วยเหลือจาก AI: ผู้ช่วย AI และ GitHub Copilot สามารถสร้างและอธิบายไปป์ไลน์แบบ pipe, grep และ sort ได้

คำสั่ง pipe, grep และ sort ใน Linux และ Unix พร้อมตัวอย่าง

Pipes, grep และ sort เป็นเครื่องมือที่ใช้บ่อยที่สุดบนระบบ ลินุกซ์ บรรทัดคำสั่งนั้นมีประโยชน์ เพราะช่วยให้คุณเชื่อมต่อคำสั่งเล็กๆ เข้าด้วยกันเป็นเวิร์กโฟลว์ที่มีประสิทธิภาพ หน้านี้จะอธิบายแต่ละวิธีพร้อมตัวอย่างการใช้งาน จากนั้นจะแสดงวิธีที่ตัวกรองเชื่อมโยงวิธีต่างๆ เข้าด้วยกัน

ไปป์ใน Linux คืออะไร?

คำสั่ง `pipe` ใน Linux ช่วยให้คุณสามารถใช้คำสั่งสองคำสั่งขึ้นไปร่วมกัน โดยที่ผลลัพธ์ของคำสั่งหนึ่งจะถูกนำไปใช้เป็นอินพุตสำหรับคำสั่งถัดไป กล่าวโดยย่อคือ ผลลัพธ์ของแต่ละกระบวนการจะถูกส่งตรงไปยังกระบวนการถัดไปในฐานะอินพุต เหมือนกับท่อส่งข้อมูล สัญลักษณ์ '|' แทนคำสั่ง `pipe`

Pipe ช่วยให้คุณรวมคำสั่งสองคำสั่งขึ้นไปเข้าด้วยกันและเรียกใช้ตามลำดับ คุณสามารถใช้คำสั่งที่มีประสิทธิภาพเพื่อทำงานที่ซับซ้อนได้อย่างรวดเร็ว

ให้เราเข้าใจสิ่งนี้ด้วยตัวอย่าง

เมื่อคุณใช้คำสั่ง 'cat' เพื่อดูไฟล์ที่มีหลายหน้า ข้อความแจ้งเตือนจะข้ามไปยังหน้าสุดท้ายของไฟล์อย่างรวดเร็ว และคุณจะไม่เห็นเนื้อหาตรงกลาง

เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถส่งเอาต์พุตของคำสั่ง 'cat' ไปยัง 'less' ซึ่งจะแสดงเนื้อหาเพียงความยาวการเลื่อนเดียวในแต่ละครั้ง

cat filename | less

ภาพประกอบจะช่วยให้เข้าใจได้ชัดเจนยิ่งขึ้น แผนภาพด้านล่างแสดงให้เห็นว่าท่อส่งผ่านผลลัพธ์ของคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่งได้อย่างไร

แผนภาพแสดงท่อส่งข้อมูลในระบบ Linux ที่ส่งเอาต์พutของคำสั่งหนึ่งไปเป็นอินพุตให้กับคำสั่งถัดไป

คำสั่ง 'pg' และ 'เพิ่มเติม'

นอกจากใช้คำว่า 'less' แล้ว คุณยังสามารถใช้คำสั่ง pg หรือ more ได้อีกด้วย:

cat Filename | pg

or

cat Filename | more

จากนั้นคุณสามารถดูไฟล์ในรูปแบบที่เข้าใจง่ายและเลื่อนลงได้โดยการกดปุ่ม Enter ภาพหน้าจอด้านล่างแสดงไฟล์ที่แบ่งหน้าด้วยคำสั่ง more

คำสั่ง cat ถูกส่งไปยังคำสั่ง more เพื่อแสดงไฟล์ขนาดใหญ่ทีละหน้าจอ

คำสั่ง 'grep'

สมมติว่าคุณต้องการค้นหาข้อมูลเฉพาะ เช่น รหัสไปรษณีย์ ในไฟล์ข้อความ

คุณสามารถอ่านเนื้อหาแบบคร่าวๆ ด้วยตนเองได้ trace ข้อมูล ตัวเลือกที่ดีกว่าคือการใช้ grep คำสั่งนี้จะสแกนเอกสารเพื่อค้นหาข้อมูลที่ต้องการและแสดงผลลัพธ์ในรูปแบบที่คุณต้องการ

ไวยากรณ์:

grep search_string

มาดูการทำงานจริงกัน ภาพหน้าจอข้างล่างแสดงผลลัพธ์ของการค้นหา

คำสั่ง grep ใช้ค้นหาสตริง "Apple" และ "Eat" ในไฟล์ตัวอย่าง

ในที่นี้ คำสั่ง grep ได้ค้นหาสตริง 'Apple' และ 'Eat' ในไฟล์ 'sample' สามารถใช้ตัวเลือกต่อไปนี้กับคำสั่งนี้ได้

ตัวเลือกเสริม (Option) ฟังก์ชัน
-v แสดงบรรทัดทั้งหมดที่ไม่ตรงกับสตริงที่ค้นหา
-c แสดงเฉพาะจำนวนบรรทัดที่ตรงกัน
-n แสดงเส้นที่ตรงกันและหมายเลข
-i ตรงกันทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
-l แสดงเฉพาะชื่อไฟล์ด้วยสตริง

ลองใช้ตัวเลือก '-i' กับไฟล์เดียวกันกับที่ใช้ข้างต้นดู ภาพหน้าจอด้านล่างแสดงผลลัพธ์ที่ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก

grep -i ทำการค้นหาตัวอักษร a โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก

เมื่อใช้ตัวเลือก '-i' คำสั่ง grep จะกรองสตริง 'a' (โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก) ออกจากทุกบรรทัด

คำสั่ง 'เรียงลำดับ'

คำสั่งนี้ช่วยในการจัดเรียงเนื้อหาของไฟล์ตามลำดับตัวอักษร

ไวยากรณ์สำหรับคำสั่งนี้คือ:

sort Filename

ลองพิจารณาเนื้อหาของไฟล์ที่แสดงด้วยคำสั่ง cat ด้านล่างนี้

คำสั่ง cat แสดงเนื้อหาที่ไม่เรียงลำดับของไฟล์ abc

การใช้คำสั่ง sort จะจัดเรียงบรรทัดเหล่านั้นตามลำดับตัวอักษร ดังที่แสดงด้านล่าง

คำสั่ง sort ใช้สำหรับจัดเรียงเนื้อหาในไฟล์ abc ตามลำดับตัวอักษร

นอกจากนี้ยังมีส่วนขยายเพิ่มเติมสำหรับคำสั่งนี้ ซึ่งแสดงไว้ด้านล่าง

ตัวเลือกเสริม (Option) ฟังก์ชัน
-r Reverseการเรียงลำดับ
-n จัดเรียงเป็นตัวเลข
-f การเรียงลำดับแบบไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก

ตัวอย่างด้านล่างแสดงการเรียงลำดับเนื้อหาในไฟล์ 'abc' แบบย้อนกลับ

คำสั่ง sort -r ใช้สำหรับเรียงลำดับเนื้อหาในไฟล์ abc จากน้อยไปมาก

ตัวกรองคืออะไร?

ลินุกซ์มีคำสั่งกรองข้อมูลมากมาย เช่น awk, grep, sed, spell และ wc ตัวกรองจะรับข้อมูลจากคำสั่งหนึ่ง ทำการประมวลผลบางอย่าง และให้ผลลัพธ์ออกมา

เมื่อคุณส่งคำสั่งสองคำสั่งผ่านไปป์ไลน์ ผลลัพธ์ที่ "กรองแล้ว" จากคำสั่งแรกจะถูกส่งไปยังคำสั่งถัดไป แผนภาพด้านล่างแสดงให้เห็นว่าตัวกรองทำงานร่วมกับไปป์ไลน์ได้อย่างไร

แผนภาพแสดงการทำงานของตัวกรองในระบบ Linux ที่รับอินพุตผ่านทางไปป์ ประมวลผล และสร้างเอาต์พุต

เรามาทำความเข้าใจเรื่องนี้ด้วยตัวอย่างกัน เรามีไฟล์ชื่อ 'sample' ซึ่งแสดงด้วยคำสั่ง cat ด้านล่าง

คำสั่ง cat แสดงเนื้อหาของไฟล์ตัวอย่างก่อนทำการกรอง

เราต้องการไฮไลต์เฉพาะบรรทัดที่ไม่มีตัวอักษร 'a' แต่ผลลัพธ์ควรอยู่ในลำดับย้อนกลับ สำหรับการนี้ สามารถใช้ไวยากรณ์ต่อไปนี้ได้:

cat sample | grep -v a | sort -r

มาดูผลลัพธ์ที่แสดงในภาพหน้าจอข้างล่างกันครับ

คำสั่ง cat ส่งข้อมูลผ่านคำสั่ง grep -v และ sort -r ทำให้ได้บรรทัดที่มีลำดับย้อนกลับโดยไม่มีตัวอักษร a

คำถามที่พบบ่อย

เครื่องหมายไปป์ (|) ส่งเอาต์พุตของคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่งโดยตรง ทำให้คำสั่งทั้งสองเชื่อมต่อกัน การเปลี่ยนเส้นทาง (> และ <) เชื่อมต่อคำสั่งกับไฟล์แทน โดยเขียนเอาต์พุตลงในไฟล์หรืออ่านอินพุตจากไฟล์ เครื่องหมายไปป์ใช้เชื่อมโยงคำสั่ง ส่วนการเปลี่ยนเส้นทางใช้เชื่อมโยงทั้งคำสั่งและไฟล์

grep ย่อมาจาก Global Regular Expression Print คำสั่งนี้จะสแกนไฟล์หรือข้อมูลป้อนเข้าทีละบรรทัด และพิมพ์ทุกบรรทัดที่ตรงกับรูปแบบที่คุณกำหนด ชื่อนี้มาจากคำสั่ง g/re/p ในโปรแกรมแก้ไขข้อความ ed รุ่นเก่า ซึ่งทำการค้นหาแบบเดียวกัน

คำสั่ง sort มีตัวเลือก -u ที่ใช้เรียงลำดับและลบบรรทัดที่ซ้ำกันในขั้นตอนเดียว: sort -u file นอกจากนี้ คุณยังสามารถส่งผลลัพธ์ของ sort ไปยัง uniq ได้ เช่น sort file | uniq เนื่องจาก uniq จะลบเฉพาะบรรทัดที่ซ้ำกันที่อยู่ติดกันเท่านั้น

ปิดท้ายไปป์ไลน์ด้วยการเปลี่ยนเส้นทาง: คำสั่ง `cat sample | grep -va | sort -r > result.txt` จะเขียนผลลัพธ์สุดท้ายลงในไฟล์ หากต้องการดูผลลัพธ์บนหน้าจอและบันทึกไปพร้อมกัน ให้ใช้คำสั่ง `tee` แทน

คำสั่ง `grep` ใช้ค้นหาภายในไฟล์ที่ตรงกับรูปแบบข้อความที่กำหนด ส่วนคำสั่ง `find` ใช้ค้นหาไฟล์และไดเร็กทอรีโดยใช้ชื่อ ขนาด ประเภท หรือวันที่ กล่าวโดยสรุป `grep` ตรวจสอบเนื้อหาของไฟล์ ในขณะที่ `find` ค้นหาไฟล์ในโครงสร้างไดเร็กทอรี

คำสั่ง `tee` อ่านข้อมูลจากไปป์และเขียนข้อมูลไปยังทั้งหน้าจอและไฟล์หนึ่งไฟล์หรือมากกว่านั้นพร้อมกัน ตัวอย่างเช่น `grep error log | tee errors.txt` คำสั่งนี้ช่วยให้คุณบันทึกผลลัพธ์ระหว่างการประมวลผลได้โดยไม่ทำให้ไปป์ไลน์หยุดชะงัก

ผู้ช่วย AI สามารถแนะนำลำดับคำสั่งที่ถูกต้องจากคำขอที่เป็นภาษาอังกฤษธรรมดา อธิบายแฟล็ก grep หรือ sort ที่ไม่คุ้นเคย และตรวจจับข้อผิดพลาดในไปป์ไลน์ได้ นอกจากนี้ เครื่องมือการเรียนรู้ของเครื่องยังสแกนเอาต์พุตบันทึกที่ส่งผ่านไปป์ไลน์เพื่อระบุความผิดปกติที่การกรองด้วยตนเองอาจมองข้ามไป

ใช่. นักบิน GitHub สามารถสร้างไปป์ไลน์ที่รวมคำสั่ง cat, grep และ sort เข้าด้วยกันได้จากข้อความอธิบายสั้นๆ เกี่ยวกับสิ่งที่คุณต้องการ และดำเนินการคำสั่งต่างๆ ให้เสร็จสมบูรณ์ขณะที่คุณพิมพ์ Revตรวจสอบขั้นตอนการทำงานที่แนะนำกับข้อมูลตัวอย่าง โดยเฉพาะตัวเลือกที่จัดเรียงลำดับใหม่หรือลบแถว

สรุปโพสต์นี้ด้วย: