Grep: ค้นหาและแทนที่บรรทัดเต็ม


13

คำสั่ง

 grep "foo" myfile.txt

พิมพ์บรรทัดที่ตรงกันทั้งหมดในไฟล์ของฉัน

ตอนนี้ฉันต้องการแทนที่สายเต็มด้วยสายอื่น ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


13

หากคุณจับคู่sซับสตริงของทั้งบรรทัดคุณสามารถใช้คำสั่งsed กับ regex เพื่อซับส่วนที่เหลือของบรรทัด:

sed -i 's/^.*foo.*$/another string/' myfile.txt

หรือใช้cคำสั่งเพื่อแทนที่บรรทัดที่ตรงกันในครั้งเดียว:

sed -i '/foo/ { c \
another string
}' myfile.txt

หากคุณไม่ต้องการพิมพ์คำสั่งหลายบรรทัดที่พรอมต์คุณสามารถวางไว้ในสคริปต์แทน:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

ขอบคุณ! เมื่อฉันใช้ตัวเลือกที่สองฉันได้รับ: sed: -e expression # 1, ถ่าน 0: ไม่มีที่เปรียบ `{'
clamp

ในตอนท้ายของบรรทัดแรกคุณต้องพิมพ์ \ จากนั้นกดReturn - มันสำคัญที่ \ escapes ที่ขึ้นบรรทัดแรก จากนั้นตรวจสอบให้แน่ใจว่า}'อยู่ในบรรทัดแยกจากanother string: การแทนที่คือทุกอย่างในบรรทัดที่สองนั้นรวมถึง}ถ้าคุณใส่ไว้ที่นั่น
ไร้ประโยชน์

-1

คุณสามารถใช้ฟังก์ชั่นinplacenalityของsed :

sed -i -e 's/foo/bar/' myfile.txt

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