[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"


답변