Unix / Linux - ท่อและตัวกรอง

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

ในการทำท่อให้ใส่แถบแนวตั้ง (|) บนบรรทัดคำสั่งระหว่างสองคำสั่ง

เมื่อโปรแกรมรับอินพุตจากโปรแกรมอื่นโปรแกรมจะดำเนินการบางอย่างกับอินพุตนั้นและเขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน จะเรียกว่าfilter.

คำสั่ง grep

คำสั่ง grep ค้นหาไฟล์หรือไฟล์สำหรับบรรทัดที่มีรูปแบบที่แน่นอน ไวยากรณ์คือ -

$grep pattern file(s)

ชื่อ "grep" มาจากคำสั่ง ed (โปรแกรมแก้ไขบรรทัด Unix) g/re/p ซึ่งหมายความว่า "ค้นหานิพจน์ทั่วไปทั่วโลกและพิมพ์ทุกบรรทัดที่มี"

นิพจน์ทั่วไปเป็นข้อความธรรมดา (เช่นคำ) และ / หรืออักขระพิเศษที่ใช้สำหรับการจับคู่รูปแบบ

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

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

มีตัวเลือกมากมายที่คุณสามารถใช้ร่วมกับไฟล์ grep คำสั่ง -

ซีเนียร์ ตัวเลือกและคำอธิบาย
1

-v

พิมพ์เส้นทั้งหมดที่ไม่ตรงกับรูปแบบ

2

-n

พิมพ์บรรทัดที่ตรงกันและหมายเลขบรรทัด

3

-l

พิมพ์เฉพาะชื่อไฟล์ที่มีบรรทัดตรงกัน (ตัวอักษร "l")

4

-c

พิมพ์เฉพาะจำนวนบรรทัดที่ตรงกัน

5

-i

จับคู่ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

ตอนนี้ให้เราใช้นิพจน์ทั่วไปที่บอกให้ grep ค้นหาบรรทัดด้วย "carol"ตามด้วยศูนย์หรืออักขระอื่น ๆ ที่ย่อในนิพจน์ทั่วไปว่า ". *") แล้วตามด้วย "ส.ค. " −

ที่นี่เรากำลังใช้ไฟล์ -i ตัวเลือกในการค้นหาแบบไม่คำนึงถึงขนาดตัวพิมพ์ -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

คำสั่งการจัดเรียง

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

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

sortคำสั่งจัดเรียงบรรทัดของข้อความตามตัวอักษรตามค่าเริ่มต้น มีตัวเลือกมากมายที่ควบคุมการเรียงลำดับ -

ซีเนียร์ คำอธิบาย
1

-n

จัดเรียงตามตัวเลข (ตัวอย่าง: 10 จะเรียงลำดับหลัง 2) โดยไม่สนใจช่องว่างและแท็บ

2

-r

กลับลำดับของการจัดเรียง

3

-f

จัดเรียงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเข้าด้วยกัน

4

+x

ละเว้นก่อน x เมื่อทำการเรียงลำดับ

อาจมีการเชื่อมโยงคำสั่งมากกว่าสองคำสั่งเข้ากับไพพ์ นำตัวอย่างท่อก่อนหน้านี้โดยใช้grepเราสามารถจัดเรียงไฟล์ที่แก้ไขเพิ่มเติมในเดือนสิงหาคมตามลำดับขนาด

ท่อต่อไปนี้ประกอบด้วยคำสั่ง ls, grepและ sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

ไปป์นี้จะจัดเรียงไฟล์ทั้งหมดในไดเร็กทอรีของคุณที่แก้ไขในเดือนสิงหาคมตามลำดับขนาดและพิมพ์บนหน้าจอเทอร์มินัล ตัวเลือกการเรียงลำดับ + 4n จะข้ามสี่ฟิลด์ (ฟิลด์ถูกคั่นด้วยช่องว่าง) จากนั้นเรียงลำดับบรรทัดตามลำดับตัวเลข

คำสั่ง pg และอื่น ๆ

โดยปกติคุณสามารถบีบอัดเอาต์พุตแบบยาวได้บนหน้าจอ แต่ถ้าคุณเรียกใช้ข้อความผ่านมากขึ้นหรือใช้ไฟล์ pgคำสั่งเป็นตัวกรอง จอแสดงผลจะหยุดเมื่อหน้าจอเต็มไปด้วยข้อความ

สมมติว่าคุณมีรายชื่อไดเร็กทอรีแบบยาว เพื่อให้ง่ายต่อการอ่านรายชื่อที่เรียงลำดับให้ไพพ์เอาต์พุตผ่านmore ดังต่อไปนี้ -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

หน้าจอจะเต็มเมื่อหน้าจอเต็มไปด้วยข้อความซึ่งประกอบด้วยบรรทัดที่เรียงตามลำดับของขนาดไฟล์ ที่ด้านล่างของหน้าจอคือไฟล์more พร้อมท์ซึ่งคุณสามารถพิมพ์คำสั่งเพื่อเลื่อนไปตามข้อความที่เรียงลำดับ

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