จะแทนที่ทั้งบรรทัดด้วย sed ได้อย่างไร?


132

สมมติว่าฉันมีไฟล์ที่มีเส้น

AAA = BBB

ตอนนี้ฉันต้องการแทนที่ด้วย:

AAA = xxx

ฉันสามารถทำได้ดังนี้:

sed "s / aaa = bbb / aaa = xxx / g"

ตอนนี้ฉันมีไฟล์ที่มีสองสามบรรทัดดังนี้:

AAA = BBB
AAA = CCC
AAA = ววว
aaa = [อย่างอื่น]

ฉันจะแทนที่บรรทัดทั้งหมดนี้aaa=[something]ด้วยการaaa=xxxใช้sed ได้อย่างไร


2
เป็น[something else]ข้อความตัวอักษรหรือว่าเพียงแค่ตัวยึดหรือไม่? อะไรคือรูปแบบที่เป็นไปได้ของสิ่งที่อยู่หลังเครื่องหมายเท่ากับ?
ean5533

นั่นเป็นคำถาม regex มากกว่าไม่ใช่คำถามที่น่าสนใจ
safeerJo

คำตอบ:


217

ลองสิ่งนี้:

sed "s/aaa=.*/aaa=xxx/g"

4
พลังแห่งนิสัยสามารถละเลยได้ในกรณีนี้ - ใช้เป็นการแทนที่ทั่วโลกสำหรับไลน์เพื่อแทนที่การแข่งขันแต่ละนัดแทนที่จะเป็นเพียงครั้งแรก ในกรณีนี้จะมีการจับคู่เพียงครั้งแรกเนื่องจากไฟล์.*.
John Doyle

1
Michael J. Barber gแทนที่อินสแตนซ์ทั้งหมดของ regexp ด้วยการแทนที่
A-IV

116

คุณยังสามารถใช้เส้นการเปลี่ยนแปลงของ sed เพื่อทำสิ่งนี้ให้สำเร็จ:

sed -i "/aaa=/c\aaa=xxx" your_file_here

นี้จะไปถึงและพบว่าเส้นใด ๆ ที่ผ่านการทดสอบซึ่งหมายความว่าเส้นมีตัวอักษรaaa= aaa=จากนั้นจะแทนที่ทั้งบรรทัดด้วย aaa = xxx คุณสามารถเพิ่ม^จุดเริ่มต้นของการทดสอบเพื่อให้แน่ใจว่าคุณได้รับเฉพาะบรรทัดที่ขึ้นต้นด้วยaaa=แต่ขึ้นอยู่กับคุณ


12
OS X ของsedต้องcจะตามมาด้วยเครื่องหมายและขึ้นบรรทัดใหม่และก็ไม่ได้ผนวกการขึ้นบรรทัดใหม่ในข้อความแทรก, $'/aaa=/c\\\naaa=xxx\n'แต่คุณสามารถใช้ตัวอย่างเช่น
Lri

นี่คือตัวอย่างและตัวอย่างในเอกสารประกอบของคุณลักษณะการเปลี่ยนแปลง / แทนที่ที่ @Mr T กำลังพูดถึง
gene_wood

นี่เป็นสิ่งที่ใกล้เคียงที่สุดกับการทำสิ่งที่ถามจริงๆ ... (แต่ต้องใช้เวอร์ชันของ Lri เพื่อการพกพา)
Gert van den Berg

42

แบบนี้:

sed 's/aaa=.*/aaa=xxx/'

หากคุณต้องการรับประกันว่าaaa=จุดเริ่มต้นของบรรทัดให้ทำดังนี้

sed 's/^aaa=.*/aaa=xxx/'

1
จะเกิดอะไรขึ้นถ้าฉันต้องการแทนที่ด้วย aaa = 'xxxx' ฉันพยายามหลบหนีsed 's/aaa=.*/aaa=\'xxx\'/'แต่นั่นเป็นการเปิด>ข้อความแจ้งในบรรทัดใหม่ ...
Nagev



0

สิ่งนี้อาจได้ผลสำหรับคุณ:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

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