Saya punya file teks ( devel.xml
).
Saya menambahkan kata REPLACETHIS untuk menggantikan string ini dengan konten dalam file yang berbeda ( temp.txt
).
Hal terdekat yang saya miliki adalah ini:
sed -i -e "/REPLACETHIS/r temp.TXT" -e "s///" devel.txt;
Ini menyisipkan konten setelah string, dan kemudian menghapus string sesudahnya.
Apakah ini cara terbaik untuk melakukannya?
text-processing
sed
perl
RafaelGP
sumber
sumber
Jawaban:
Apa yang telah Anda lakukan adalah menghapus di
SUBSTITUTETHIS
mana pun itu muncul dalam file (tetapi tidak sisa baris di mana ia muncul) dan masukkan konten ditemp.TXT
bawah baris itu. JikaSUBSTITUTETHIS
muncul beberapa kali dalam satu baris, hanya kemunculan pertama yang dihapus, dan hanya satu salinantemp.TXT
yang ditambahkan.Jika Anda ingin mengganti seluruh baris saat
SUBSTITUTETHIS
muncul, gunakand
perintah. Karena Anda perlu menjalankan keduanyar
dand
ketika ada pertandingan, masukkan mereka dalam kelompok yang diperkuat.Beberapa implementasi sed memungkinkan Anda menggunakan titik koma untuk memisahkan perintah dan menghilangkan pemisah di sekitar tanda kurung, tetapi Anda masih memerlukan baris baru untuk mengakhiri argumen ke
r
perintah:Jika Anda ingin mengganti
SUBSTITUTETHIS
dengan konten file, tetapi simpan apa yang datang sebelum dan sesudahnya di telepon, itu lebih rumit. Metode paling sederhana adalah dengan memasukkan konten file dalam perintah sed; perhatikan bahwa Anda harus mengutip dengan benar isinya.Atau gunakan Perl. Ini singkat tetapi berjalan
cat
sekali untuk setiap substitusi:Untuk membaca file sekali ketika skrip dimulai, dan hindari tergantung pada perintah shell:
(disajikan pada dua baris agar mudah dibaca tetapi Anda dapat menghilangkan jeda baris). Jika nama file adalah variabel, untuk menghindari masalah mengutip, kirimkan ke script melalui variabel lingkungan:
sumber
cat temp.txt
saya bisa lakukancat ${variable}
?-0777
switch untuk slurp di seluruh file, dan biasaopen
:perl -0777 -pe 'BEGIN {open F, q(temp.TXT); $r=<F>; chomp($r)} s/SUBSTITUTETHIS/$r/ge' -i devel.txt
r temp.TXT
dengan pesan seperti "BEGIN temp.TXT", "END temp.TXX"a
perintah (tambahkan). grymoire.com/Unix/Sed.html#uh-36