<ก่อนหน้านี้ | 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 ตัวเลือก เราสามารถระบุอักขระทวิภาคเป็นตัวคั่นฟิลด์