ฉันจะผนวกเอาต์พุตของคำสั่งต่อท้ายไฟล์ข้อความได้อย่างไร?
ฉันจะผนวกเอาต์พุตของคำสั่งต่อท้ายไฟล์ข้อความได้อย่างไร?
คำตอบ:
ใช้>>
แทน>
เมื่อนำเอาต์พุตไปยังไฟล์:
your_command >> file_to_append_to
หากfile_to_append_to
ไม่มีอยู่มันจะถูกสร้างขึ้น
ตัวอย่าง:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
เพื่อappend
ใช้ไฟล์ >>
echo "hello world" >> read.txt
cat read.txt
echo "hello siva" >> read.txt
cat read.txt
ดังนั้นผลลัพธ์ควรเป็น
hello world # from 1st echo command
hello world # from 2nd echo command
hello siva
เพื่อoverwrite
ใช้ไฟล์ >
echo "hello tom" > read.txt
cat read.txt
จากนั้นนำออกมาคือ
hello tom
คุณสามารถใช้โอเปอเรเตอร์ >> นี้จะผนวกข้อมูลจากคำสั่งไปยังจุดสิ้นสุดของไฟล์ข้อความ
ในการทดสอบให้ลองเรียกใช้:
echo "Hi this is a test" >> textfile.txt
ทำสองสามครั้งแล้วเรียกใช้:
cat textfile.txt
คุณจะเห็นข้อความของคุณต่อท้ายไฟล์ textfile.txt หลายครั้ง
ใช้command >> file_to_append_to
เพื่อผนวกเข้ากับไฟล์
ตัวอย่างเช่น echo "Hello" >> testFile.txt
ข้อควรระวัง:ถ้าคุณใช้เพียงไฟล์เดียว>
คุณจะเขียนทับเนื้อหาของไฟล์ เพื่อให้แน่ใจว่าไม่เคยเกิดขึ้นคุณสามารถเพิ่มที่คุณset -o noclobber
.bashrc
วิธีนี้ช่วยให้มั่นใจได้ว่าหากคุณพิมพ์command > file_to_append_to
ไฟล์ที่มีอยู่โดยไม่ตั้งใจมันจะเตือนคุณว่าไฟล์นั้นมีอยู่แล้ว ข้อความแสดงข้อผิดพลาดตัวอย่าง:file exists: testFile.txt
ดังนั้นเมื่อคุณใช้>
มันจะอนุญาตให้คุณสร้างไฟล์ใหม่เท่านั้นไม่เขียนทับไฟล์ที่มีอยู่
ใช้>>
โอเปอเรเตอร์เพื่อต่อท้ายข้อความในไฟล์
การใช้teeพร้อมตัวเลือก-a (- ผนวก)ช่วยให้คุณสามารถผนวกหลาย ๆ ไฟล์พร้อมกันและใช้sudo (มีประโยชน์มากเมื่อผนวกกับไฟล์ที่มีการป้องกัน) นอกจากนั้นมันเป็นเรื่องที่น่าสนใจหากคุณจำเป็นต้องใช้เชลล์อื่นนอกเหนือจาก bash เนื่องจากเชลล์บางตัวไม่รองรับตัวดำเนินการ> และ >>
echo "hello world" | sudo tee -a output.txt
กระทู้นี้มีคำตอบที่ดีเกี่ยวกับที
สำหรับคำถามทั้งหมด:
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
สิ่งนี้จะผนวก 720 บรรทัด (30 * 24) ลงใน o.txt และหลังจากนั้นจะเปลี่ยนชื่อไฟล์ตามวันที่ปัจจุบัน
เรียกใช้ข้างต้นด้วย cron ทุกชั่วโมงหรือ
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
ฉันจะใช้ printf แทน echo เพราะมีความน่าเชื่อถือมากกว่าและกระบวนการจัดรูปแบบเช่นบรรทัดใหม่\n
อย่างถูกต้อง
ตัวอย่างนี้สร้างเอาต์พุตคล้ายกับ echo ในตัวอย่างก่อนหน้านี้:
printf "hello world" >> read.txt
cat read.txt
hello world
อย่างไรก็ตามหากคุณต้องแทนที่ printf ด้วย echo ในตัวอย่างนี้ echo จะถือว่า \ n เป็นสตริงดังนั้นจึงไม่สนใจเจตนา
printf "hello\nworld" >> read.txt
cat read.txt
hello
world
ฉันขอแนะนำให้คุณทำสองสิ่ง:
>>
ในเชลล์สคริปต์ของคุณเพื่อผนวกเนื้อหาไปยังไฟล์เฉพาะ ชื่อไฟล์สามารถแก้ไขได้หรือใช้รูปแบบบางอย่างตัวอย่างเช่นไฟล์ของคุณมี:
1. mangesh@001:~$ cat output.txt
1
2
EOF
ถ้าคุณต้องการต่อท้ายไฟล์แล้ว ----> จำช่องว่างระหว่าง 'text' >> 'filename'
2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt
1
2
EOF
somthing to append
และเพื่อเขียนทับเนื้อหาของไฟล์:
3. mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
somthing new to write
cat
เป็น ... แค่แปลกประหลาดอย่างสมบูรณ์ (มันว่างเปล่าเพราะคุณเพียงแค่เปลี่ยนเส้นทางออกมาตรฐานไปยังแฟ้ม.)
echo
ลบบรรทัดใหม่จากสตริง คุณจะต่อท้ายสตริงไฟล์ที่มีการขึ้นบรรทัดใหม่ได้อย่างไร?