วิธีรับบรรทัดแรกของไฟล์ข้อความอินพุตขณะลบบรรทัดนั้นจากไฟล์ข้อความ


11

ฉันจะรับบรรทัดแรกของไฟล์ข้อความอินพุตขณะลบบรรทัดนั้นจากไฟล์ข้อความได้อย่างไร

ถ้าฉันมีไฟล์ข้อความ/myPathToTheFile.txtแบบนี้

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

ฉันต้องการรับบรรทัดนี้เป็นผลลัพธ์

► put returns between paragraphs

และไฟล์ข้อความของฉันควรเป็นแบบนี้

► for linebreak add 2 spaces at end
► _italic_ or **bold*

โปรดทราบว่าค่าใช้จ่ายของการดำเนินการนี้เป็นสัดส่วนกับขนาดไฟล์ ดังนั้นหากไฟล์มีขนาดใหญ่และคุณทำสิ่งนี้บ่อยมันจะช้ามาก
CodesInChaos

คำตอบ:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

หรือ

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

หรือพิมพ์น้อย:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

ว้าวใช้ประโยชน์ได้ดีเลย ... !
qwr

10

อย่างน้อยกับ GNU sed:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

ด้วย GNU sed มันสามารถเขียนเป็นหนึ่งซับได้

sed -i -e '1 {w /dev/stdout' -e 'd}' file



2

คุณสามารถใช้head, tailและmv:

แสดงบรรทัดแรก:

head -1 myPathToTheFile.txt

การเก็บ+2บรรทัดสุดท้าย ( ):

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

การใช้ file descriptors และเล็กน้อย python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

ใช้หัวและหาง ไฟล์คือ target.txt

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

หมายเหตุ: ตรวจสอบให้แน่ใจว่าไม่มีไฟล์ tmp อยู่ในโฟลเดอร์ปัจจุบันมิฉะนั้นจะถูกลบออก

คำอธิบาย:

  • "head -1" เลือกบรรทัดแรก
  • "tail -n + 2 target.txt> tmp" เลือกทุกบรรทัดตั้งแต่ 2nd เป็นต้นไป (รวมถึง) และวางไว้ใน tmp
  • mv เขียนทับไฟล์ต้นฉบับด้วย tmp
  • rm tmp จะลบไฟล์ tmp ที่สร้างขึ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.