ฉันจะแสดงเนื้อหาของไฟล์ข้อความในบรรทัดคำสั่งได้อย่างไร


131

ฉันต้องการแสดงเนื้อหาของไฟล์ข้อความในบรรทัดคำสั่ง ไฟล์นี้มีเพียง 5-6 ตัวอักษร มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?

คำตอบ:


194

การใช้ cat

catตั้งแต่ไฟล์ของคุณเป็นระยะสั้นที่คุณสามารถใช้

cat filename

การใช้ less

lessหากคุณต้องดูเนื้อหาของแฟ้มอีกต่อไปคุณสามารถใช้เพจเจอร์เช่น

less filename

คุณสามารถทำให้มีlessพฤติกรรมเช่นcatเมื่อเรียกใช้กับไฟล์ขนาดเล็กและทำงานได้ตามปกติโดยการส่งผ่าน-Fและตั้ง-Xค่าสถานะ

less -FX filename

less -FXฉันมีนามแฝงสำหรับ คุณสามารถทำให้ตัวเองเป็นเช่น:

alias aliasname='less -FX'

หากคุณเพิ่มนามแฝงในการกำหนดค่าเชลล์ของคุณคุณสามารถใช้มันได้ตลอดไป

การใช้ od

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

$ cat file
(ÐZ4 ?o=÷jï
$ od -c test
0000000 202 233   ( 320   K   j 357 024   J 017   h   Z   4 240   ?   o
0000020   = 367  \n
0000023

+1 ก็sed -n l fileมีประโยชน์เช่นกัน
enzotib

1
ไม่lessมีข้อได้เปรียบที่ชัดเจนใด ๆ ที่เหนือกว่าโปรแกรมอื่น ๆ เช่นวิทยุติดตามตัวpgหรือไม่ก็แค่ต้มลงไปตั้งค่าส่วนตัว?
Sam Weinberg

@SamWeinberg: มีคุณสมบัติมากกว่าless pgลองดูที่less(1)และpg(1)manpages มีวิทยุติดตามตัวอื่น ๆ เช่นกัน ลองดูที่unix.stackexchange.com/questions/81129/... lessน่าจะเป็นเพจเจอร์ที่ใช้กันอย่างแพร่หลาย แต่อันที่คุณใช้มาเพื่อความชอบส่วนตัว

อย่าลืมmoreและmost!
Rudolf Olah

29

แม้ว่าทุกคนใช้cat filenameในการพิมพ์ข้อความไฟล์ไปออกวัตถุประสงค์แรกมาตรฐานคือนักโทษแมว enating จากหน้าคนแมว:

cat - เชื่อมไฟล์และพิมพ์บนเอาต์พุตมาตรฐาน

ตอนนี้ cat ใช้ได้สำหรับการพิมพ์ไฟล์ แต่มีทางเลือกอื่น:

  echo "$(<filename)"
or
  printf "%s" "$(<filename)"

( )กลับค่าของการแสดงออกในกรณีนี้เนื้อหาของชื่อไฟล์ซึ่งจากนั้นจะมีการขยายตัว$สำหรับหรือechoprintf

ปรับปรุง:

< filename

สิ่งนี้ทำในสิ่งที่คุณต้องการและจดจำได้ง่าย

นี่คือตัวอย่างที่ช่วยให้คุณเลือกไฟล์ในเมนูจากนั้นพิมพ์

#!/bin/bash

select fname in *;
do
# Don't forget the "" around the second part, else newlines won't be printed
  printf "%s" "$(<$fname)"
  break
done

สำหรับการอ่านเพิ่มเติม:
BashPitfalls - cat file | sed s / foo / bar /> file
Bash Reference - การเปลี่ยนเส้นทาง


การอัปเดตของคุณ: " < filenameเป็นสิ่งที่คุณต้องการ ... " กำลังทำให้เข้าใจผิด โดยรวมแม้ว่านี่เป็นการสนทนาที่น่าสนใจเกี่ยวกับทางเลือกอื่น แต่ฉันคิดว่าcatง่ายกว่า
X Tian

เปลือย< filenameไม่แสดงเนื้อหาของไฟล์ แต่cat filenameทำ
jarno

คุณสามารถใช้tee < filenameเช่นกัน
jarno

2
+1 สำหรับecho "$(<filename)"bashism ไม่เพียงพอที่นี่
Yokai

นั่นเป็นความคิดที่ดีในการใช้คำสั่ง Linux "$(<filename)"ภายในกับก้อง ขอบคุณ ...
Reza Harasani

9

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

ชื่อไฟล์แมว 

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้cat man cat

9

เครื่องมือสำหรับจัดการไฟล์ข้อความบนยูนิกซ์เป็นคำสั่งพื้นฐานทุกวัน:

ในยูนิกซ์และลินุกซ์เพื่อพิมพ์เนื้อหาทั้งหมดในไฟล์

cat filename.txt

หรือ

more filename.txt

หรือ

less filename.txt

สำหรับสองสามบรรทัดสุดท้าย

tail filename.txt

สำหรับสองสามบรรทัดแรก

head filename.txt

4

ทางเลือกหนึ่งคือการใช้ more

เช่น more file.txt

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

น้อยมาก


3

ฉันมักจะใช้$ less "your file here"เพราะมันง่ายมากให้grepคำสั่งแบบโต้ตอบในตัวและให้อินเทอร์เฟซที่ใช้งานง่ายซึ่งคุณสามารถเลื่อนด้วยปุ่มลูกศร

(รวมอยู่ในระบบ * nix เกือบทุกระบบ)


lessเป็นรุ่น overkill ของmore(เปรียบเทียบman lessกับman more) และสำหรับฉันมันมีสองคุณสมบัติที่น่ารำคาญ: 1) มันสลับไปที่บัฟเฟอร์หน้าจอทางเลือกเมื่อยกเลิกน้อยกว่าไฟล์ที่คุณเพิ่งดูหายไป 2) ที่ EOF คุณต้องพิมพ์อย่างชัดเจนq(ฉันรู้ว่ามีตัวเลือกสำหรับสิ่งนี้) ดังนั้นหนึ่งในการกระทำแรกของฉันในสภาพแวดล้อมใหม่คือการตั้งค่าexport PAGER=/bin/moreในโปรไฟล์ของฉันและใช้moreตลอดเวลา
ott--

@ ott--: 1) ลองใช้-Xธง 2) ลองใช้-Eธง lessมีmoreโหมดการจำลอง คุณสามารถเปิดใช้งานได้โดยการตั้งค่าLESS_IS_MOREตัวแปรสภาพแวดล้อม คุณสามารถเลื่อนขึ้นด้านบนในmoreโหมดการจำลอง

ดูเพิ่มเติมที่: unix.stackexchange.com/questions/81129/ …

แม้ว่าโดยทั่วไปแล้วฉันยอมรับว่าlessมันซับซ้อนเกินไป ความสามารถในการเรียกใช้คำสั่งภายนอกเป็นตัวอย่างที่สมบูรณ์แบบของความซับซ้อนที่มากเกินไป

@EvanTeitelman ฉันพบเสมอว่าฟังก์ชัน grep มีประโยชน์อย่างมากกับตัวเอง @ ott-- ฉันพบว่าเพราะมันเป็นแบบจำลองmoreและมีคุณสมบัติเพิ่มเติมมากมายมันทำงานได้ดีมาก
SG60

2

หากเป็นไฟล์ขนาดใหญ่และคุณต้องการค้นหาบางส่วนคุณสามารถใช้

 cat filename | grep text_to_search -ni 

นอกจากนี้คุณสามารถใช้โปรแกรมแก้ไข Vim แบบอินเทอร์แอ็คทีฟ (หรือโปรแกรมแก้ไข vi หากคุณไม่มี Vim):

 vim filename
Or
 vi filename

Vim / vi เป็นตัวแก้ไขที่ยอดเยี่ยมนอกจากนี้ยังสามารถใช้เป็นตัวอ่านใน "โหมดปกติ" หรือใช้ตัวเลือก -R มันมีคุณสมบัติมากมายที่จะช่วยคุณในการเรียกดูไฟล์


สั้นคือvim -R viewแต่เก็บไว้ในใจว่ามันไม่ชอบการเปลี่ยนเส้นทางตามที่กล่าวไว้ในxargs และ vi -“การป้อนข้อมูลไม่ได้มาจากขั้ว”
จัดการ

ขอบคุณ @manatwork สำหรับหัวขึ้น! ฉันเพิ่งเริ่มใช้ Vim และฉันชอบเพราะมีคุณสมบัติหลายประการ เกี่ยวกับการเปลี่ยนเส้นทางฉันลืมไปแล้วขอบคุณสำหรับการเตือน ณ ตอนนี้ฉันกำลังทำงานกับรีโมต VM ที่ฉันใช้ ssh โดยไม่มีอินเตอร์เฟส GUI ดังนั้น Vim นั้นใช้งานได้ดีมากเมื่อตัวแก้ไข GUI อื่นไม่สามารถทำงานได้นั่นคือสาเหตุที่ฉันเน้น Vim ที่นี่
คุณไม่ต้องห่วงลูก

1

ใช้คำสั่ง cat เพื่อแสดงเนื้อหาของชื่อไฟล์ ชื่อไฟล์แมว

ใช้คำสั่ง vim เพื่อแก้ไขไฟล์ ชื่อไฟล์เป็นกลุ่ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.