Saya ingin mengganti $fileWithPath
di $file
, namun hal ini tidak bekerja karena (saya pikir) jalan tidak lolos. Bagaimana cara menghindarinya?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
Kutipan tunggal menentukan string literal. Menempatkan variabel di luar literal memungkinkan shell untuk memperluas bagian itu.
Juga: jika Anda akan mengurai path, gunakan pembatas dalam perintah sed yang tidak membingungkan dengan pembatas direktori "/".
$fileWithPath
berisi spasi putih, pola yang salah dimasukkan.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
sepertinya berhasil.Cara yang lebih baik untuk string literal dengan garis miring ke depan:
sumber
Dalam keadaan di mana string pengganti atau string pola mengandung garis miring, Anda dapat menggunakan fakta bahwa GNU sed memungkinkan pembatas alternatif untuk perintah pengganti. Pilihan umum untuk pembatas adalah karakter pipa | atau hash # - pilihan terbaik untuk membatasi karakter akan sering bergantung pada jenis file yang sedang diproses. Dalam kasus Anda, Anda dapat mencoba
Karakter 'g' setelah # terakhir digunakan untuk mengubah semua kejadian dalam file jika Anda hanya perlu mengubah kejadian pertama, kemudian hapus 'g'.
sumber