Script ini menggunakan sed untuk mengubah semua "" menjadi "hal baru". Bagaimana seseorang akan mengubah hanya "" setelah yyy: menggunakan sed atau apa pun?
cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt
Saya mungkin tidak mengerti pertanyaan Anda. Jika Anda ingin mengganti HANYA nilai setelah 'yyy' maka gunakan jawaban sebelumnya. Jika Anda ingin mengganti nilai APAPUN setelah 'yyy', coba satu baris ini:
sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt
Belum mengujinya: D ...
Jawaban diperoleh dari O'Reilly - Sed & Awk Penambahan ke-2 Di Sekitar halaman 152
Tulis skrip dalam file
/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}
Terapkan ini ke data Anda dengan yang biasa
sed -f script sample.txt
Script ini mengatakan mencari yyy :. Ketika ditemukan baca baris lain ke dalam buffer pola (terdengar seperti Star Trek Transporter). Sekarang lakukan sebagai / perintah pada baris yang bergabung. Jadi kami mencari yyy: baris baru "". Jika ditemukan ganti dengan yyy: \ notice backslash newline aktual maka "new stuff"
Semoga berhasil
Saya menemukan begitu segala sesuatu melampaui tingkat kompleksitas tertentu, saya beralih ke perl . s2p akan menangani terjemahan dari solusi sed Anda saat ini. Atau Anda bisa menulisnya dari awal dengan sepele. Ekspresi pencarian / penggantian akan tetap sama.
sumber