Saya punya dua file: file1
dan file2
.
file1
memiliki konten berikut:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
berisi alamat IP ( 1.1.1.1
)
Yang ingin saya lakukan adalah mengganti localhost
dengan 1.1.1.1
, sehingga hasil akhirnya adalah:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Saya telah mencoba:
sed -i -e "/localhost/r file2" -e "/localhost/d" file1
sed '/localhost/r file2' file1 |sed '/localhost/d'
sed -e '/localhost/r file2' -e "s///" file1
Tapi saya bisa mengganti seluruh baris, atau IP ke baris setelah saya perlu memodifikasi.
text-processing
sed
Jay Kah
sumber
sumber
cat file1 | sed -e 's/localhost/1.1.1.1/g'
berhasil?\r
perintah sed.Jawaban:
Ini
sed
solusinya:Anda harus menggunakan
sed -i
untuk membuat perubahan di tempat.Jika Anda dapat menggunakan
awk
, berikut adalah salah satu cara untuk melakukannya:sumber
awk
. Aku membayangkansed
ini mampu ini, tetapi akan menjadi sangat canggung. Di sinilahawk
bersinar!sed
solusi harus dikutip ganda jika file tersebut berisi spasi atau karakter glob./
dan&
di substitusi. Itu"$(sed 's:[/\\&]:\\&:g' file2)"
Anda dapat membaca file dengan string pengganti menggunakan substitusi perintah shell, sebelum
sed
digunakan. Jadised
hanya akan melihat substitusi normal:sed "s/localhost/$(cat file2)/" file1 > changed.txt
sumber
Coba gunakan
dan kemudian, hapus bidang yang tidak diinginkan.
sumber
Saya juga punya "masalah" ini hari ini: bagaimana cara mengganti blok teks dengan konten dari file lain.
Saya telah menyelesaikannya dengan membuat fungsi bash (yang dapat digunakan kembali dalam skrip).
sumber