เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

ตัด

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

การระบุส่วนของบรรทัดที่จะแยกออกมาค่อนข้างยากและถูกระบุโดยใช้ตัวเลือกต่อไปนี้:


ตาราง 20-3: ตัด ตัวเลือกการเลือก


คำอธิบายตัวเลือก

คำอธิบายตัวเลือก

-c char_list แยกส่วนของบรรทัดที่กำหนดโดย char_list. รายการอาจประกอบด้วยช่วงตัวเลขที่คั่นด้วยเครื่องหมายจุลภาคตั้งแต่หนึ่งช่วงขึ้นไป


ภาพ

-f field_list แยกฟิลด์ตั้งแต่หนึ่งฟิลด์ขึ้นไปจากบรรทัดตามที่กำหนดโดย

field_list. รายการอาจมีฟิลด์หรือช่วงฟิลด์ตั้งแต่หนึ่งฟิลด์ขึ้นไปโดยคั่นด้วยเครื่องหมายจุลภาค


ภาพ

-d เดลิม_ชาร์ เมื่อ -f ระบุไว้ ใช้ เดลิม_ชาร์ เป็นฟิลด์คั่นอักขระ โดยค่าเริ่มต้น ฟิลด์ต้องคั่นด้วยอักขระแท็บเดียว


ภาพ

--complement แยกข้อความทั้งบรรทัด ยกเว้นส่วนเหล่านั้น

ระบุโดย -c และ / หรือ -f.


ภาพ


อย่างที่เราเห็นวิธี ตัด แยกข้อความค่อนข้างไม่ยืดหยุ่น ตัด ควรใช้เพื่อแยกข้อความจากไฟล์ที่สร้างโดยโปรแกรมอื่น แทนที่จะใช้ข้อความที่มนุษย์พิมพ์โดยตรง เราจะดูที่ของเรา distros.txt เพื่อดูว่ามัน “สะอาด” พอที่จะเป็นตัวอย่างที่ดีสำหรับเราหรือไม่ ตัด ตัวอย่าง. ถ้าเราใช้ แมว กับ -A เราสามารถดูว่าไฟล์ตรงตามข้อกำหนดของเราสำหรับฟิลด์ที่คั่นด้วยแท็บหรือไม่:



[me@linuxbox ~]$ แมว -A distros.txt

ซูส^I10.2^I12/07/2006$

Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$

Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$

Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$

[me@linuxbox ~]$ แมว -A distros.txt

ซูส^I10.2^I12/07/2006$

Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$

Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$

Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$


ซูส^I10.1^I05/11/2006$

Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$

ซูส^I10.1^I05/11/2006$

Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$


มันดูดี. ไม่มีช่องว่าง มีเพียงอักขระแท็บเดียวระหว่างฟิลด์ เนื่องจากไฟล์ใช้แท็บแทนการเว้นวรรค เราจะใช้เครื่องหมาย -f ตัวเลือกในการแยกฟิลด์:


[me@linuxbox ~]$ ตัด -f 3 distros.txt

12/07/2006

11/25/2008

06/19/2008

04/24/2008

11/08/2007

10/04/2007

10/26/2006

05/31/2007

10/18/2007

04/19/2007

05/11/2006

10/24/2006

05/13/2008

06/01/2006

10/30/2008

03/20/2006

[me@linuxbox ~]$ ตัด -f 3 distros.txt

12/07/2006

11/25/2008

06/19/2008

04/24/2008

11/08/2007

10/04/2007

10/26/2006

05/31/2007

10/18/2007

04/19/2007

05/11/2006

10/24/2006

05/13/2008

06/01/2006

10/30/2008

03/20/2006


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



[me@linuxbox ~]$ ตัด -f 3 distros.txt | ตัด -c 7-10

2006

2008

2008

2008

2007

2007

2006

2007

[me@linuxbox ~]$ ตัด -f 3 distros.txt | ตัด -c 7-10

2006

2008

2008

2008

2007

2007

2006

2007


2007

2007

2006

2006

2008

2006

2008

2006

2007

2007

2006

2006

2008

2006

2008

2006


ภาพ

โดยการวิ่ง ตัด เป็นครั้งที่สองในรายการของเรา เราสามารถแยกตำแหน่งอักขระ 7 ถึง 10 ซึ่งสอดคล้องกับปีในฟิลด์วันที่ของเรา NS 7-10 สัญกรณ์เป็นตัวอย่างของช่วง NS ตัด man page มีคำอธิบายที่สมบูรณ์ว่าสามารถระบุช่วงได้อย่างไร


ขยายแท็บ

Our distros.txt ไฟล์มีรูปแบบที่เหมาะสำหรับการแยกฟิลด์โดยใช้ ตัด. แต่ถ้าเราต้องการไฟล์ที่สามารถจัดการได้อย่างเต็มที่ ตัด ตามตัวอักษรมากกว่าฟิลด์? ซึ่งจะทำให้เราต้องแทนที่อักขระแท็บภายในไฟล์ด้วยจำนวนช่องว่างที่สอดคล้องกัน โชคดีที่แพ็คเกจ GNU Coreutils มีเครื่องมือสำหรับสิ่งนั้น ชื่อ ขยายตัวโปรแกรมนี้ยอมรับอาร์กิวเมนต์ของไฟล์อย่างน้อยหนึ่งอาร์กิวเมนต์หรืออินพุตมาตรฐาน และเอาต์พุตข้อความที่แก้ไขเป็นเอาต์พุตมาตรฐาน

ถ้าเราประมวลผล .ของเรา distros.txt ไฟล์ด้วย ขยายตัวเราสามารถใช้ไฟล์ ตัด -c เพื่อแยกช่วงของอักขระออกจากไฟล์ ตัวอย่างเช่น เราสามารถใช้คำสั่งต่อไปนี้เพื่อแยกปีที่เผยแพร่ออกจากรายการของเรา โดยขยายไฟล์และใช้ ตัด เพื่อแยกอักขระทุกตัวจากตำแหน่งที่ยี่สิบสามไปยังท้ายบรรทัด:

[me@linuxbox ~]$ ขยาย distros.txt | ตัด -c 23-

Coreutils ยังให้ ไม่ขยาย โปรแกรมแทนแท็บสำหรับช่องว่าง


เมื่อทำงานกับฟิลด์ เป็นไปได้ที่จะระบุตัวคั่นฟิลด์อื่นแทนที่จะเป็นอักขระแท็บ ที่นี่เราจะแยกฟิลด์แรกออกจาก / etc / passwd ไฟล์:


[me@linuxbox ~]$ ตัด -d ':' -f 1 /etc/passwd | ศีรษะ

ภูตรูต

[me@linuxbox ~]$ ตัด -d ':' -f 1 /etc/passwd | ศีรษะ

ภูตรูต


bin sys sync เกม man lp mail news

bin sys sync เกม man lp mail news


การใช้ -d ตัวเลือก เราสามารถระบุอักขระทวิภาคเป็นตัวคั่นฟิลด์


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: