Saya menjalankan beberapa perintah substitusi sebagai inti dari skrip colorize untuk maven . Salah satu sed
perintah menggunakan ekspresi reguler yang berfungsi menemukan di shell seperti yang dibahas di sini . Implementasi saat ini (tidak berfungsi) dapat ditemukan di sini .
Ketika saya memasukkan salah satu varian perintah ke dalam skrip, perilaku yang berbeda terjadi:
Varian 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Diadaptasi ke skrip:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Kesalahan: Shell mengeluarkan informasi yang sama seperti jika saya mengetik $ sed
. Aneh!?
Varian 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Diadaptasi ke skrip:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Kesalahan:
sed: -e ekspresi # 7, karakter 59: referensi tidak valid \ 1 pada RHS perintah `s '
'
dan tanda kutip ganda "
diperlakukan sedikit berbeda, terutama saat menafsirkan $vars
. Misalnya: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
berfungsi, tetapi: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
tidak.
-i
(edit di opsi tempat) dengan-re
, menghasilkan-ire
(sehingga-i
memakanre
fragmen sebagaiSUFFIX
argumennya dan karenanya mode regex yang diperpanjang tidak diaktifkan); mengubahnya untuk-i -re
memperbaiki masalah.