[regex] sed 오류 : “`s ‘명령의 RHS에 대한 잘못된 참조 \ 1”
maven 에 대한 colorize 스크립트 의 핵심으로 몇 가지 대체 명령을 실행합니다 . sed
명령 중 하나는 여기에 설명 된 대로 쉘에서 찾을 수있는 정규식을 사용합니다 . 현재 (작동하지 않는) 구현은 여기 에서 찾을 수 있습니다 .
명령의 변형 중 하나를 스크립트에 포함하면 다른 동작이 발생합니다.
변형 1 :
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
스크립트에 적용 :
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
오류 : 셸이를 입력하는 것과 동일한 정보를 출력합니다 $ sed
. 이상한!?
변형 2 :
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
스크립트에 적용 :
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
오류:
sed : -e 식 # 7, char 59 :`s ‘명령의 RHS에 대한 잘못된 참조 \ 1
답변
작동하기 위해 실제로 캡처 할 필요가 없습니까? 즉 변형 2 :
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
(참고 : 테스트되지 않음)
-r 인수가 없으면 역 참조 (예 : \ 1)가 작동하지 않습니다.
답변
이 오류는 이스케이프되지 않은 괄호에 일반적입니다. 탈출하고 다시 시도하십시오.
예를 들면 :
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g
각 괄호 앞에 백 슬래시로 이스케이프해야합니다.
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
답변
는 IF -r
/의 --regexp-extended
옵션이 제공되지 않으며, 다음 캡처 괄호 이스케이프해야합니다.
답변
당신은 /
후 탈출 필요.
sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g"
또는 탈출에 대해 걱정하고 싶지 않다면 |
sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g"
편집하다:
sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"