ค้นหาตำแหน่งแล้วทำการเปลี่ยนแปลงโดยใช้ sed


11

สคริปต์นี้ใช้ sed เพื่อเปลี่ยน "" ทั้งหมดเป็น "สิ่งใหม่" หนึ่งจะเปลี่ยนเพียงแค่ "" หลังจาก yyy: ใช้ sed หรือสิ่งอื่นได้อย่างไร

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

คำตอบ:


8

ฉันอาจไม่เข้าใจคำถามของคุณ หากคุณต้องการแทนที่เฉพาะค่าหลัง 'yyy' ให้ใช้คำตอบก่อนหน้า หากคุณต้องการแทนที่ค่าใด ๆ หลังจาก 'yyy' ให้ลองใช้ตัวเลือกต่อไปนี้:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

ยังไม่ได้ทดสอบ: D ...


3

รวบรวมคำตอบจาก O'Reilly - Sed & Awk 2nd Addition รอบ ๆ หน้า 152

เขียนสคริปต์ในไฟล์

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

ใช้สิ่งนี้กับข้อมูลของคุณตามปกติ

sed -f script sample.txt

สคริปต์นี้บอกว่ามองหาปปปป: เมื่อพบอ่านอีกบรรทัดหนึ่งในบัฟเฟอร์รูปแบบ (เสียงเหมือน Star Trek Transporter) ตอนนี้ทำตาม / คำสั่งในบรรทัดที่เข้าร่วม ดังนั้นเรากำลังมองหา yyy: newline "" หากพบว่าแทนที่ด้วย yyy: \ notice backslash newline จริงจากนั้น "new stuff"

โชคดี


1
ดูหน้าคน: unixhelp.ed.ac.uk/CGI/man-cgi?sed ค้นหาที่อยู่ย่อหน้าวรรค

1

ผมพบว่าครั้งหนึ่งเคยเป็นสิ่งที่ได้รับเกินกว่าระดับหนึ่งของความซับซ้อนของผมเปลี่ยนไปPerl s2pจะจัดการการแปลโซลูชัน sed ปัจจุบันของคุณ หรือคุณสามารถเขียนได้ตั้งแต่เริ่มต้นเล็กน้อย การค้นหา / แทนที่นิพจน์จะยังคงเหมือนเดิม

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