"w"로 시작하는 단어를 사용할 때 sed의 문제점

"w"로 시작하는 단어를 사용할 때 sed의 문제점

이게 효과가 있어

echo "         HELLO   x=10" |sed 's/ *\HELLO \+/HELLO /g'

hello 앞과 "HELLO" 뒤에 연속된 공백을 제거하세요.

그러나 이것은 그렇지 않습니다

echo "         WHERE     x=10" |sed 's/ *\WHERE \+/WHERE /g'

아래와 같이 \w를 사용하여 \w를 탈출하려고 했습니다.

echo "         WHERE     x=10" |sed 's/ *\\"WHERE" \+/\"WHERE" /g'

그러나 이것조차 작동하지 않습니다. 무엇이 잘못됐나요?

답변1

왜 H와 W를 탈출하고 싶나요?

\H및 구체적인 의미가 있으며, 및 \W와는 다릅니다 .HW

echo "         WHERE     x=10" |sed 's/ *WHERE \+/WHERE /g'

답변2

이전 단어를 제거하면 됩니다 \.

echo "         WHERE     x=10" |sed 's/ *WHERE \+/WHERE /g'
WHERE x=10

\정규식의 in은 다양한 유형의 일치를 위한 이스케이프 문자로 사용됩니다 .

\w(밑줄) 문자를 포함하여 단어 문자, 즉 의 문자를 찾는 데 사용됩니다 .a-zA-Z0-9_

대문자 버전으로부정적인게임, 당신의 \W수단아니요분명히 정규식을 만드는 단일 문자와 일치합니다.실패하다입력 문자열의 경우.

예를 들면 다음과 같습니다.

echo "         {HERE     x=10" |sed 's/ *\WHERE \+/WHERE /g'
WHERE x=10

그것은 작동하기 때문에{ 일치합니다 \W( {단어 문자가 아니기 때문에)!

관련 정보