Helpex - Trao đổi & giúp đỡ Đăng nhập
71

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 sedlệnh sử dụng một biểu thức chính quy tìm thấy trong shell như được thảo luận ở đây . Việc thực hiện (không hoạt động) hiện tại 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"

Thích ứng với kịch bản:

-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \

Lỗi: Shell xuất thông tin giống như tôi sẽ gõ $ sed. Lạ nhỉ!?


Biến thể 2:

$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"

Thích ứng với kịch bản:

-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \

Lỗi:

sed: -e biểu thức # 7, char 59: tham chiếu không hợp lệ \ 1 trên RHS của lệnh `s '

71 hữu ích 2 bình luận 61k xem chia sẻ
34

Bạn không cần phải thực sự nắm bắt để làm việc đó? tức là cho biến thể 2:

-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \

(Lưu ý: chưa được kiểm tra)

Nếu không có tham chiếu ngược đối số -r (như \ 1) sẽ không hoạt động.

34 hữu ích 4 bình luận chia sẻ
46

Lỗi này là phổ biến cho các dấu ngoặc đơn không được thoát. Thoát khỏi chúng và thử lại.


Ví dụ:

/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g

Nên thoát với dấu gạch chéo ngược trước mỗi dấu ngoặc đơn:

/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
46 hữu ích 1 bình luận chia sẻ
4

Bạn cần phải thoát khỏi /sau.

sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g"

Hoặc nếu bạn không muốn lo lắng về việc trốn thoát, hãy sử dụng |

sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g"

CHỈNH SỬA:

sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"
4 hữu ích 4 bình luận chia sẻ
0

Nếu tùy chọn -r/ --regexp-extendedkhông được cung cấp, thì dấu ngoặc đơn bắt giữ phải được thoát.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ regex sed substitution , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading