Tôi chạy một số lệnh thay thế làm lõi của colorize script for maven. Một trong các lệnh sed
sử dụng cụm từ thông dụng hoạt động trong vỏ dưới dạng discussed here. Triển khai hiện tại (không hoạt động) có thể được tìm thấy here.lỗi sed: "tham chiếu không hợp lệ 1 trên lệnh 's' RHS"
Khi tôi bao gồm một trong những biến thể của lệnh vào hành vi kịch bản khác nhau xảy ra:
Biến thể 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Thích nghi với kịch bản:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Lỗi: Cô ấy sẽ xuất ra cùng một thông tin như thể tôi sẽ nhập $ sed
. Lạ thật !?
Biến thể 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Thích nghi với kịch bản:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Lỗi:
sed: -e expression #7, char 59: invalid reference \1 on `s' command's RHS
Trong trường hợp của tôi, tôi đã kết hợp một '-i' (chỉnh sửa trong lựa chọn nơi) với '-re', kết quả là' -ire' (để '-i' đang tiêu thụ đoạn' re' làm đối số 'SUFFIX' của nó và do đó chế độ regex mở rộng không được kích hoạt); thay đổi nó thành '-i -re' đã khắc phục vấn đề. –
Cũng cần lưu ý rằng các dấu nháy đơn ''' và dấu ngoặc kép '' 'được xử lý hơi khác một chút, đặc biệt khi giải thích' $ vars'. Ví dụ: 'sudo sh -c" sed-r -i' s/(^. + _supplicant.conf)/\ 1 $ {MTXT}/'/ etc/network/interfaces "' hoạt động, nhưng: 'sudo sh -c' sed-r -i" s/(^.+_ supplicant.conf)/\ 1 $ {MTXT}/"/ etc/network/interfaces'' không. – not2qubit