คำสั่ง
grep "foo" myfile.txt
พิมพ์บรรทัดที่ตรงกันทั้งหมดในไฟล์ของฉัน
ตอนนี้ฉันต้องการแทนที่สายเต็มด้วยสายอื่น ฉันจะทำสิ่งนั้นได้อย่างไร
คำสั่ง
grep "foo" myfile.txt
พิมพ์บรรทัดที่ตรงกันทั้งหมดในไฟล์ของฉัน
ตอนนี้ฉันต้องการแทนที่สายเต็มด้วยสายอื่น ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
หากคุณจับคู่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
}'
อยู่ในบรรทัดแยกจากanother string
: การแทนที่คือทุกอย่างในบรรทัดที่สองนั้นรวมถึง}
ถ้าคุณใส่ไว้ที่นั่น