Tôi chạy một số lệnh thay thế làm cốt lõi của tập lệnh tô màu cho maven . Một trong các sed
lệnh sử dụng biểu thức chính quy hoạt động được tìm thấy trong shell như được thảo luận ở đây . Việc triển khai hiện tại (không hoạt động) có thể được tìm thấy ở đây .
Khi tôi đưa một trong các biến thể của lệnh vào tập lệnh, hành vi khác sẽ xảy ra:
Biến thể 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Điều chỉnh theo kịch bản:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Lỗi: Trình bao xuất ra thông tin giống như khi tôi nhập $ sed
. Kỳ lạ !?
Biến thể 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Điều chỉnh theo kịch bản:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Lỗi:
biểu thức sed: -e # 7, char 59: tham chiếu không hợp lệ \ 1 trên RHS của lệnh `s '
'
và dấu ngoặc kép "
được xử lý hơi khác nhau, đặc biệt là khi diễn giải $vars
. Ví dụ: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
works, but: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
does not.
-i
(tùy chọn chỉnh sửa tại chỗ) với-re
, kết quả là-ire
(vì vậy điều đó-i
đang sử dụngre
phân đoạn làmSUFFIX
đối số của nó và do đó chế độ regex mở rộng không được bật); thay đổi nó để-i -re
khắc phục sự cố.