แมวใช้สำหรับทำอะไร


14

ฉันเห็นคำสั่ง cat ปรากฏขึ้นในบางสิ่งออนไลน์และฉันอยากรู้ว่าสิ่งใดที่catทำและสิ่งนั้นมีไว้เพื่ออะไรในบริบทของคนที่เพิ่งทำสิ่งบรรทัดคำสั่งง่ายๆ

คำตอบ:


12

catวัตถุประสงค์หลักของคือการต่อต้านไฟล์แมว enate cat file1 file2 ...จะแสดงเนื้อหาของfile, file2และคนอื่น ๆ หนึ่งหลังจากที่อื่นเช่นถ้าเนื้อหาอยู่ในไฟล์เดียว ดูmanpage :

NAME
       cat - concatenate and print files

มันมีไว้สำหรับการใช้งานที่:

  • คำสั่งเป้าหมายไม่สามารถอ่านจากไฟล์และคุณต้องส่งไฟล์หลายไฟล์ ตัวอย่างคือtrยูทิลิตี้ โดยปกติด้วยไฟล์เดียวคุณจะทำ:

    tr < file
    

    แต่ด้วยหลายไฟล์การเปลี่ยนเส้นทางไม่สามารถใช้งานได้ดังนั้นคุณต้องทำดังนี้

    cat file1 file2 ... | tr
    
  • คำสั่งเป้าหมายสามารถอ่านได้จากหลาย ๆ ไฟล์ แต่ลักษณะการทำงานของมันอาจเปลี่ยนไปเมื่อได้รับหลายไฟล์ ตัวอย่างคือwcซึ่งพิมพ์จำนวนสำหรับแต่ละไฟล์พร้อมกับชื่อไฟล์ที่คุณอาจต้องการเพียงแค่จำนวนรวมโดยไม่มีชื่อไฟล์

โปรดจำไว้ว่าคำสั่งส่วนใหญ่ที่คุณพบ ( grep, sed, awk, sort, ... ) สามารถอ่านไฟล์สมบูรณ์ดี

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


การเปลี่ยนเส้นทางสามารถใช้กับหลายไฟล์ได้เป็นอย่างดีเนื่องจากคุณสามารถรวมเข้ากับการทดแทนกระบวนการและคำสั่ง: < <(cat file[12]) trรวมถึง<<<$(cat file[12]) trวิธีที่ถูกต้องสมบูรณ์ในการเปลี่ยนเส้นทางไฟล์หลายไฟล์ แน่นอนว่าคุณต้องการcatสิ่งนั้นเช่นกันเพียงแค่การต่อท่อไม่ใช่วิธีเดียว
ของหวาน

@dessert หากคุณต้องอวดความสนใจการเปลี่ยนเส้นทางนั้นยังคงใช้ไฟล์เพียงไฟล์เดียว - ไฟล์ที่เป็นตัวแทนของคำสั่ง stdout (หรือ stdin หากเป็นวิธีอื่น) Bash ไม่รองรับการเปลี่ยนเส้นทางหลายไฟล์อย่างแท้จริงเช่น zsh
muru

9

catเป็นหนึ่งในคำสั่งที่ใช้บ่อยที่สุดในระบบปฏิบัติการยูนิกซ์ มันมีสามหน้าที่ที่เกี่ยวข้องกับไฟล์ข้อความ:

  1. แสดงพวกเขา
  2. รวมสำเนาของพวกเขา
  3. สร้างใหม่
  4. คัดลอกไฟล์

ไวยากรณ์ทั่วไปของ cat คือ:

cat [options] [filenames] [-] [filenames]

กำลังอ่านไฟล์

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

cat file1

เรียงต่อกัน

บทบาทที่สองของแมวคือการต่อกัน (นี่คือที่มาของชื่ออยากรู้อยากเห็นของแมว) ไม่มีผลกับไฟล์ต้นฉบับ

ตัวอย่างเช่นคำสั่งต่อไปนี้จะเชื่อมต่อสำเนาของเนื้อหาของสามไฟล์ file1, file2 และ file3:

cat file1 file2 file3

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

cat file1 file2 file3 > file4

การสร้างไฟล์

ขอบคุณที่@muruความคิดเห็น: cat สามารถสร้างไฟล์ใหม่ได้ขึ้นอยู่กับคุณสมบัติการเปลี่ยนเส้นทางของเชลล์ไม่ใช่ตัวของมันเอง

สำหรับไฟล์ขนาดเล็กมักจะง่ายกว่าการใช้ vi, gedit หรือโปรแกรมแก้ไขข้อความอื่น ๆ สามารถทำได้โดยพิมพ์ cat ตามด้วยตัวดำเนินการเปลี่ยนเส้นทางเอาต์พุตและชื่อของไฟล์ที่จะสร้างจากนั้นกดENTERและในที่สุดก็กดCtrl& & พร้อมกันdปุ่ม

ตัวอย่างเช่นไฟล์ใหม่ชื่อ file1 สามารถสร้างได้โดยการพิมพ์

cat > file1

แล้วกดENTERและพร้อมกดCtrlและdปุ่ม

PS1: หากไฟล์ชื่อ file1 มีอยู่แล้วมันจะถูกเขียนทับ

PS2: คุณสามารถต่อท้ายเพื่อออกจากไฟล์โดยใช้>>ตัวอย่างตัวดำเนินการผนวกcat >> file1

คัดลอกไฟล์

คำสั่ง cat ยังสามารถใช้ได้ ( ขึ้นอยู่กับคุณสมบัติการเปลี่ยนเส้นทางของเชลล์) เพื่อสร้างไฟล์ใหม่และถ่ายโอนข้อมูลจากไฟล์ที่มีอยู่ ตัวอย่าง: ทำสำเนาไฟล์oldfile.txt:

cat oldfile.txt > newfile.txt

อ้างอิง:


1
Re 3: catไม่ได้สร้างไฟล์เหล่านั้น - เชลล์คือเมื่อคุณใช้การเปลี่ยนเส้นทาง echo foo > file1คุณอาจทำได้เช่นกัน
muru

@muru คุณพูดถูก แต่มันก็ยังคงใช้คำสั่ง cat อยู่
Maythux

1
ไม่มันไม่ใช่ คุณกำลังอ้างถึงcatสิ่งที่กำลังทำจริงโดยอย่างอื่น ตัวอย่างเช่นการทำless file1 > file2(หรือgrep '.*' file1 > fileหรือawk 1 file1 > file2หรือ ... ) มีผลเหมือนกัน เหมือนกันสำหรับ 4 สิ่งเหล่านี้เป็นเพียงการใช้ในทางที่ผิด
muru

ฉันรู้ว่าฉันสามารถใช้มันได้> fileและให้ผลเหมือนกัน แต่ฉันไม่คิดว่ามันถูกต้องหรือไม่ที่จะทำกับแมว!
Maythux

1
คุณสามารถถ้าคุณระบุcatว่าไม่ได้สร้างไฟล์ การบอกว่าcatสร้างหรือคัดลอกไฟล์เป็นเท็จเพียงธรรมดา
muru

1

มันสามารถใช้เพื่อแสดงเนื้อหาของไฟล์ cat "my file.txt"เช่น: คุณยังสามารถทำman catเพื่อแสดงรายละเอียดเกี่ยวกับสิ่งที่catสามารถนำมาใช้สำหรับ


0

นี่เป็นอีกวิธีในการสร้างไฟล์โดยใช้การเปลี่ยนเส้นทางเชลล์ (หรือไพพ์) และcat:

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOFจะส่งออกบรรทัดต่อไปนี้จนกว่าEOFจะพบสตริงอีกครั้ง จากนั้น>( >>) foo.shจะเปลี่ยนเส้นทางการส่งออกไปยังแฟ้ม อีกทางเลือกหนึ่งถ้าคุณต้องการสร้างไฟล์เป็นรูทคุณสามารถไพพ์เอาต์พุตไปยังคำสั่งtee( tee -a) ซึ่งดำเนินการโดยคำสั่งsudo:

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • ด้านบนจะทำให้ไฟล์เรียกใช้งานได้ ( chmod +x) หากสร้างสำเร็จ ( &&)
  • พิเศษความหมายของตัวละครบางตัว (เป็น$) ควรจะหนี (มี\) catภายในการส่งออกของ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.