ผนวกสตริงที่ท้ายบรรทัดทั้งหมดอย่างไร


5

ฉันกำลังพยายามเพิ่มสตริงที่ท้ายบรรทัดทั้งหมดในไฟล์ข้อความ แต่ฉันมีข้อผิดพลาดบางแห่ง

ตัวอย่าง:

ฉันนี้ในไฟล์ข้อความ:

begin--fr.a2dfp.net
begin--m.fr.a2dfp.net
begin--mfr.a2dfp.net
begin--ad.a8.net
begin--asy.a8ww.net
begin--abcstats.com
...

ฉันวิ่ง:

sed -i "s|\x0D$|--end|" file.txt

และฉันได้รับ:

begin--fr.a2dfp.net--end
begin--m.fr.a2dfp.net--end
begin--mfr.a2dfp.net--end
begin--ad.a8.net
begin--asy.a8ww.net--end
begin--abcstats.com
...

สตริงถูกเพิ่มเฉพาะในบางบรรทัดและไม่อยู่ในอื่น

มีความคิดอะไรไหม

คำตอบ:


10

\x0Dคือการคืนสินค้าซึ่งอาจหรืออาจไม่ปรากฏในเครื่องมือแก้ไขข้อความของคุณ ดังนั้นหากคุณแก้ไขไฟล์ในทั้ง Windows และระบบ Unix / Linux อาจมีการขึ้นบรรทัดใหม่ dos2unixหากคุณต้องการที่จะลบผลตอบแทนการขนส่งได้อย่างน่าเชื่อถือที่คุณควรใช้ sed -i "s|$|--end|" file.txtถ้าคุณอยากจะเพิ่มข้อความไปยังจุดสิ้นสุดของเส้นเพียงแค่ใช้


ใช่มันเป็นไฟล์ข้อความจาก Windows ที่แก้ไขใน Linux dos2unixแก้ปัญหาจริงๆและตอนนี้เพิ่ม--endในตอนท้ายของทุกบรรทัดของฉัน ขอขอบคุณ!!!!
rkifo

@ user294721 หากคำตอบนี้แก้ปัญหาของคุณได้โปรดอย่าลืมว่ามันเป็นที่ยอมรับ
terdon

1
คุณสามารถลบการขึ้นsed 's/\r\?$/--end/'
บรรทัดใหม่

4

อาจมีวิธีในการทำสิ่งนี้:

  1. Perl

    perl -i -pe 's/$/--end/' file.txt
    
  2. sed

    sed -i 's/$/--end/' file.txt
    
  3. awk

    awk '{$NF=$NF"--end"; print}' file.txt > foo && mv foo file.txt
    
  4. เปลือก

    while IFS= read -r l; do 
     echo "$l""--end"; 
    done < file.txt > foo && mv foo file.txt
    

@ user294721 คุณยินดีมาก โปรดจำไว้ว่าให้ยอมรับหนึ่งในคำตอบเหล่านี้เพื่อที่คำถามจะถูกทำเครื่องหมายเป็นคำตอบ
terdon

0

คุณอาจลองใช้ex:

ex +"%s/$/--end/g" -cwq foo.txt 

vi -eซึ่งเทียบเท่ากับ

ตัวเลือก-iนั้นเข้ากันไม่ได้ระหว่าง Linux และ Unix และอาจไม่มีในระบบปฏิบัติการอื่น

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