แทนที่หลายบรรทัดใน sed หรือ awk [ปิด]


9

ฉันกำลังพยายามใช้ sed หรือ awk เพื่อแทนที่ 5 บรรทัดในไฟล์ smb แต่ฉันไม่มีความคิดวิธีจัดการกับการขึ้นบรรทัดใหม่


6
แน่นอนฉันสามารถทำสิ่งนี้ได้ แต่ฉันมีปัญหาเล็กน้อยที่จะเข้าใจว่าคำถามของคุณคืออะไร อะไรคือสาเหตุที่ทำให้คุณเดือดร้อน การแทรกบรรทัดใหม่ แทนที่พวกเขา?
frabjous

คำตอบ:


19

Sed ค่อนข้างแย่ในเรื่องนี้เพราะทำงานทีละบรรทัด เทคนิคที่ดีเพียงอย่างเดียวที่ฉันเคยเห็นในการทำเช่นนี้คือเทคนิคนี้ซึ่งเกี่ยวข้องกับการจัดเก็บไฟล์ทั้งหมดในบัฟเฟอร์พักสายของ sed แล้วดำเนินการกับไฟล์ทั้งหมดในครั้งเดียว:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

หากคุณสามารถทำได้ง่ายกว่าที่จะใช้ Perl เพื่อทำสิ่งนี้:

perl -0pe 's/search/replace/'

searchสามารถมี\ns เพื่อแสดงบรรทัดใหม่


1
+1 สำหรับsedMultiliner
Lazer

คุณช่วยอธิบายสิ่งที่บรรทัดคำสั่ง args ไปที่ perl ทำได้หรือไม่?
Michael

1
@Michael -0ตั้งค่าตัวคั่นเร็กคอร์ดให้เป็นโมฆะดังนั้นไฟล์ทั้งหมดจะถูกอ่านพร้อมกันแทนทีละบรรทัด -pทำให้มันพิมพ์ผลหลังจากการทดแทน -eมันต้องใช้อาร์กิวเมนต์ถัดไปเป็นนิพจน์ที่จะเรียกใช้และs/search/replace/เป็นนิพจน์นั้น
Michael Mrozek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.