Temukan posisi, lalu ubah menggunakan sed


11

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

Jawaban:


8

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 ...


3

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


1
lihat halaman manual: unixhelp.ed.ac.uk/CGI/man-cgi?sed mencari paragraf alamat

1

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.