이제 알아요 그게 \b
바로Word Boundaries
하지만
\s
이다\S
Shorthand Character Classes
어디
\s
(소문자) 공백(공백, 탭, vtabs, 줄 바꿈)
그리고
\S
(대문자)는 그 반대이다. 공백 이외의 것
wolf@linux:~$ cat space.txt
0space
1 spaces
2 spaces
3 spaces
4 spaces
wolf@linux:~$
이 두 명령 사이에는 아무런 차이가 없습니다.
wolf@linux:~$ grep -P '\S\s\S' space.txt
1 spaces
wolf@linux:~$ grep -P '\S\s\S\S' space.txt
1 spaces
wolf@linux:~$
그리고
wolf@linux:~$ grep -P '\b\s\b' space.txt
1 spaces
wolf@linux:~$ grep -P '\b\s\b\b' space.txt
1 spaces
wolf@linux:~$
답변1
GNU를 사용한 예 sed
:
\b
문자열의 각 항목을 괄호로 묶습니다 Hello world!
.
$ sed 's/\b/(&)/g' <<<'Hello world!'
()Hello() ()world()!
보시다시피 \b
일치하는 문자가 없습니다. 대신 각 단어의 시작과 끝에서 너비가 0인 단어 경계를 일치시킵니다.
그런 다음 동일한 작업을 수행합니다 \S
.
$ sed 's/\S/(&)/g' <<<'Hello world!'
(H)(e)(l)(l)(o) (w)(o)(r)(l)(d)(!)
\S
공백이 아닌 모든 문자 와 일치합니다 .
특정 개수의 공백을 일치시키려는 경우 사용합니다 \S\s{3}\S
. 이렇게 하면 세 개의 공백과 일치하지만 해당 공백을 공백이 아닌 문자로 양쪽에 묶어야 합니다. 줄의 시작이나 끝 부분에 공백이 나타나면 이 표현식의 일치가 실패합니다.
를 사용하는 경우 \b\s{3}\b
단어 경계로 둘러싸인 세 개의 공백이 필요합니다. 이것회의이는 줄의 시작이나 끝 부분에 공백이 나타날 수 있는 경우에도 일치합니다. 그러나 공백이 단어가 아닌 다른 문자(예: 문자열)로 둘러싸여 있으면 실패합니다 hello; ;world
.
참고로 \s
POSIX 문자 클래스와 마찬가지로 공백과 탭(및 기타 몇 가지 문자) 모두와 일치합니다 [[:space:]]
. 공백만 일치시키려면 공백 문자를 사용하십시오. 공백이 아닌 문자도 일치시킬 수 있습니다 [^ ]
.