เพิ่มคำลงในไฟล์ข้อความโดยใช้คำสั่งเดียว (ไม่มีบรรณาธิการ)


22

ฉันใหม่กับ Linux ฉันต้องการแก้ไข.confไฟล์จากเทอร์มินัลเปิดเท่านั้นและไม่ใช้โปรแกรมแก้ไขข้อความใด ๆ นั่นคือฉันสามารถเพิ่มคำและประโยคลงในไฟล์ปรับแต่งจากเทอร์มินัลแบบเปิดได้หรือไม่

ตัวอย่าง: command /home/.../file.conf -add 'abcd'ไปยังบรรทัดที่ 23 เป็นต้นไป และสุดท้ายก็บันทึกไว้

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


1
ดูเหมือนว่าsedสามารถมาช่วย
nitishch

1
ถามคำถามเดียว
Avinash Raj

คำตอบ:


39

ฉันมักจะทำวิธีนี้เมื่อฉันเขียนโปรแกรมสคริปต์ของฉันเพื่อทำสิ่งเดียวกันกับที่คุณถาม แต่โดยทางโปรแกรม

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

Voila! คุณได้รับมัน สิ่งสำคัญที่ควรทราบ>>หมายถึงการเพิ่มบรรทัดใหม่ลงในไฟล์ที่มีอยู่ในขณะเดียวกัน>ก็แค่เขียนทับทุกสิ่ง


ขอบคุณสำหรับการตอบกลับที่รวดเร็ว แต่ฉันต้องเพิ่มเหมือนมากกว่า 3000 คำในบรรทัดที่ 23 ของไฟล์. conf ของฉันตามลำดับ มีวิธีง่ายกว่านี้ไหม?
259060

20

การเพิ่มคำและประโยคไปยังไฟล์ปรับแต่งจากเทอร์มินัลเปิดสามารถทำได้อย่างง่ายดายด้วย sed

sed -i '23iabcd' file.conf

แทรกที่บรรทัดที่ 23 ข้อความabcdลงในไฟล์file.conf

-ifile.confไม่ปรับเปลี่ยนโดยตรงไปยังแฟ้ม

ถ้าคุณต้องการใช้awkแล้ว:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

ต่อไปนี้จะเพิ่มหนึ่งบรรทัดหลัง SearchPattern

sed -i '/SearchPattern/aNew Text' SomeFile.txt

มันแทรกข้อความใหม่หนึ่งบรรทัดด้านล่างแต่ละบรรทัดที่มี SearchPattern

ในการเพิ่มสองบรรทัดคุณสามารถใช้\และป้อนบรรทัดใหม่ขณะพิมพ์ข้อความใหม่

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

คุณยังสามารถใช้printfคำสั่ง

เพื่อเพิ่มบรรทัดลงในไฟล์ของคุณ

$ printf "\nThis is a new line to your document" >> file.txt

เพื่อเขียนทับไฟล์

$ printf "This overwrites your file" > file.txt

0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

หมายเหตุ:

  • regex เป็นนิพจน์ปกติ (หรือเรียกอีกอย่างว่า regex) ซึ่งจะกำหนดเกณฑ์การค้นหา ช่วยให้การแสดงผลปกติสำหรับการค้นหาที่ปรับแต่งได้มากและไวยากรณ์ที่เข้าใจกันโดย awk คือในคู่มือ ในกรณีที่ง่ายที่สุด - ค้นหาสตริง "ตามเดิม", อักขระต่ออักขระ - เพียงใส่แบ็กสแลชก่อนอักขระพิเศษ (ดูคู่มือสำหรับรายการอักขระพิเศษ)

มันทำงานอย่างไร:

  • เปิดinputfileสำหรับอ่านบรรทัดอินพุตให้ล้างoutputfileและเปิดเพื่อเขียนบรรทัดเอาต์พุต
  • สำหรับแต่ละบรรทัดให้รันบล็อกด้วยเครื่องหมายปีกกา:
    • หากบรรทัดตรงกับนิพจน์ทั่วไปให้เอาท์พุทบรรทัดที่มีเนื้อหาต่อท้าย
    • มิฉะนั้นเอาท์พุทบรรทัดเดียวกันมาก

0

ฉันพบวิธีแก้ปัญหาสำหรับคำถามของฉันเองโดยใช้edคำสั่ง

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

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

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