pola sed dengan banyak kata untuk diperbarui

1

Saya ingin melakukan sesuatu seperti ini, tetapi saya tidak yakin bagaimana caranya.

Saya ingin memperbarui exports.version = '2.0.0' ke nilai baru exports.version = '2.0.1'

Menggunakan:

sed -i '.bak' 's/'2.0.0'/'2.0.1'/g' phantomjs.js

Tapi ini dapat menyebabkan masalah adalah saya memiliki sesuatu yang lain dengan 2.0.0

sed -i '.bak' 's/exports.version = '2.0.0'/exports.version = '2.0.1'/g' phantomjs.js

Singkatnya, bagaimana cara memberi makan dengan pola exports.version = '2.0.0'

uname -a

15.0.0 Darwin Kernel Versi 15.0.0: Sabtu 19 September 15:53:46 PDT 2015; root: xnu-3247.10.11 ~ 1 / RELEASE_X86_64 x86_64

Terima kasih,

L.

lindison
sumber
"versi" atau "versi"?
Cyrus
Fantastis; ini berhasil. Seperti yang dilakukan John1024. Terima kasih!
lindison

Jawaban:

1

Coba ini:

sed -i '.bak' "s/exports\.version = '2\.0\.0'/exports.version = '2.0.1'/g" phantomjs.js
Cyrus
sumber
Untuk lolos dari .: +1.
John1024
1

Anda mencoba untuk menempatkan tanda kutip tunggal di dalam string tanda kutip tunggal. Jika Anda melakukannya, Anda harus memasukkannya seperti ini:

$ sed -i .bak 's/exports.version = '\''2.0.0'\''/exports.version = '\''2.0.1'\''/g' phantomjs.js

Tidaklah mungkin untuk secara langsung memasukkan tanda kutip tunggal ke dalam string tanda kutip tunggal. Dalam hal di atas, '\''berfungsi karena kutipan tunggal pertama mengakhiri string kutipan tunggal sebelumnya, \'kutipan tunggal lolos di baris perintah, dan yang berikut 'memulai string kutipan tunggal baru.

Dalam kasus khusus Anda, Anda juga bisa menggunakan string yang dikutip ganda:

sed -i .bak "s/exports.version = '2.0.0'/exports.version = '2.0.1'/g" phantomjs.js

Ini nyaman karena dimungkinkan untuk menempatkan tanda kutip tunggal di dalam string yang dikutip ganda tanpa melarikan diri. Ini sulit meskipun karena Anda harus yakin bahwa tidak ada karakter shell-aktif di string. Dalam hal ini, tidak ada, jadi itu aman.

John1024
sumber