สคริปต์นี้ใช้ sed เพื่อเปลี่ยน "" ทั้งหมดเป็น "สิ่งใหม่" หนึ่งจะเปลี่ยนเพียงแค่ "" หลังจาก yyy: ใช้ sed หรือสิ่งอื่นได้อย่างไร
cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
สคริปต์นี้ใช้ sed เพื่อเปลี่ยน "" ทั้งหมดเป็น "สิ่งใหม่" หนึ่งจะเปลี่ยนเพียงแค่ "" หลังจาก yyy: ใช้ sed หรือสิ่งอื่นได้อย่างไร
cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
คำตอบ:
ฉันอาจไม่เข้าใจคำถามของคุณ หากคุณต้องการแทนที่เฉพาะค่าหลัง 'yyy' ให้ใช้คำตอบก่อนหน้า หากคุณต้องการแทนที่ค่าใด ๆ หลังจาก 'yyy' ให้ลองใช้ตัวเลือกต่อไปนี้:
sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt
ยังไม่ได้ทดสอบ: D ...
รวบรวมคำตอบจาก 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"
โชคดี
ผมพบว่าครั้งหนึ่งเคยเป็นสิ่งที่ได้รับเกินกว่าระดับหนึ่งของความซับซ้อนของผมเปลี่ยนไปPerl s2pจะจัดการการแปลโซลูชัน sed ปัจจุบันของคุณ หรือคุณสามารถเขียนได้ตั้งแต่เริ่มต้นเล็กน้อย การค้นหา / แทนที่นิพจน์จะยังคงเหมือนเดิม