섹션 [^]
은 문자 클래스가 아닙니다. ]
브래킷은 부정 문자 클래스의 첫 번째 문자이며 코드는 (문자 클래스의 일부로 모두 )//g
처리)을 찾고 오류를 발생시키는 끝 마커를 찾지 못합니다.
긍정적 인 경우 [][]
을 사용하여 문자 클래스에서 닫는 대괄호 또는 열린 대괄호를 찾을 수 있습니다. 음수 버전은 [^][]
입니다.
[^]]
을 사용하면 오류 메시지가 중지됩니다. 그러면 사용자가 의도 한대로 정규식을 고쳐야합니다.
기본적으로 괄호는 그룹화 메타 문자가 아니라 괄호로 해석됩니다 (이 경우 \(…\)
). 사실 그룹화 할 필요가 없으므로 괄호는 아래 토론에서 제외됩니다.
질문을 다시 읽을 때 정규 표현식에 대한 수정이 보통으로 취소됩니다. 캐럿과 그 다음 문자를 삭제하려고합니다. 그건 좀 모호합니다. 캐럿이 줄의 끝에 있으면 (다음 문자가 줄 바꿈이기 때문에), 줄 바꿈도 삭제해야합니까? 나는 그렇게하지 않을 것입니다. 또한 ^^
을 삭제해야한다고 가정합니다. 질문은 '내 문자의 캐럿 (^) 문자를 말하고, 다음 문자도 캐럿이 아니면'그 문자를 지우지 않습니다 '라고 말합니다. 분명히, 정규식은 가정이 잘못 될 경우 조정될 수 있습니다 (새 라인 가정은 처리하기가 더 어렵지만 상당한 차이가 있음). 존재하는 경우
sed 's/\^.\{0,1\}//g'
이 동일한 행에, 캐럿 (피 문자 클래스)과 다음 문자를 찾는다 - \{0,1\}
표기 이전 발현 0 또는 1 반복을 의미한다.
sed
의 변형이 확장 정규 표현식을 지원하는 경우 sed -E 's/\^.?//g'
(Mac OS X 및 BSD) 또는 sed -r 's/\^.?//g'
(GNU)을 사용할 수 있습니다.
캐럿으로 구성된 문자 클래스는 실제로 POSIX에서 지원되지 않습니다. [\^]
표기법은 백 슬래시와 캐럿으로 구성된 문자 클래스 :
이
$ echo 'abc\de^Afg' | sed 's/[\^].\{0,1\}//g'
abcefg
$ echo 'abc\de^Afg' | sed 's/\^.\{0,1\}//g'
abc\defg
$ echo 'abc\de^Afg' | sed -E 's/\^.?//g'
abc\defg
$ echo 'abc\de^Afg' | /opt/gnu/bin/sed 's/[\^].\{0,1\}//g'
abcefg
$ echo 'abc\de^Afg' | /opt/gnu/bin/sed 's/\^.\{0,1\}//g'
abc\defg
$ echo 'abc\de^Afg' | /opt/gnu/bin/sed -r 's/\^.?//g'
abc\defg
$
(일반 sed
맥 OS X sed
입니다 /opt/gnu/bin/sed
은 GNU sed
입니다 ('또는 캐럿'?).)
'^'가 줄 끝 부분에 있다면 어떻게 하시겠습니까? 간결하고 테스트 가능한 샘플 입력과 예상 출력을 포함하도록 질문하십시오. –
동일한 행동 - 나는 당신이이 엣지 케이스에 대해 걱정할 것이라고 생각조차하지 않았습니다. 감사. – dvasdekis