단어 시작 부분의 따옴표를 바꾸고 싶습니다.
예를 들어:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"\
| sed "s/\b'/X/g"
a 'lineX a single ' after a 'keywordX with a few spaceXs for a program
하지만 보시다시피 교체 중입니다.끝말은 시작이 아닙니다.
단어의 시작 부분을 바꾸는 방법은 무엇입니까?
답변1
이는 '
단어의 시작 부분을 대체합니다.
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/'\b/X/g"
a Xline' a single ' after a Xkeyword' with a few spaceXs for a program
여기에는 인간(컴퓨터는 아님)의 특징이 있습니다. 컴퓨터는 이것을 space's
두 단어로 인식하고 '
두 번째 단어의 시작 부분에 있기 때문에 the를 대체합니다.
논의하다
\b
시작이나 끝 중 단어 경계를 표시하십시오. 이제 생각해 보세요 \b'
. 이는 다음에 나오는 단어 경계와 일치합니다 '
. '
그렇기 때문에아니요즉, 단어의 끝이 '
일치하려면 단어 앞에 와야 함을 의미합니다. \b
단어의 시작 부분을 일치시키 려면 순서를 반대로 하십시오: '\b
. 다시 말하지만, 단어 문자가 아니기 때문에 '
뒤에 단어가 있어야만 일치합니다 '
.
GNU sed와 같은 일부 sed는 \<
단어 시작 부분 일치를 지원합니다. '
더 이상 단어 문자가 아니므로 문제가 발생하기 때문에 이는 도움이 되지 않습니다 .
"공간"에 대해 어떻게 해야 할까요?
in 이 단어 끝에 나타나기 때문에 '
바꾸고 싶지 않은 경우 다음을 사용하여 논리를 뒤집을 수 있습니다 .space's
'
\B
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/\B'/X/g"
a Xline' a single X after a Xkeyword' with a few space's for a program
\B
성냥단어 경계가 아님. 따라서 공백이나 따옴표는 모두 단어 문자가 아니므로 \B'
일치합니다 (공백-인용). is는 단어 경계이기 때문에 '
at과 일치하지 않습니다 . 단어 문자이지만 그렇지 않습니다.space'
e'
e
'