![문자열에서 단어의 특정 인스턴스를 분리합니다.](https://linux55.com/image/226628/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%EB%8B%A8%EC%96%B4%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%A5%BC%20%EB%B6%84%EB%A6%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
grep
문자열을 처리하는 명령이 있습니다
test-test test
test
명령이 강조 표시된 "independent"라는 단어만 표시하고 싶습니다 test-test
.
그러나 내가 달릴 때
echo "test-test test" | grep -w "test"
나는 test
일어난 모든 일을 강조했습니다.
고립된 발생으로만 일치 항목을 제한할 수 있습니까 test
?
답변1
단어는 영숫자와 밑줄 등 단어가 아닌 문자로 구분된 일련의 단어 문자이기 때문에 모든 test
항목이 굵게 표시됩니다 . 단어 문자가 아닙니다.-w
-
에서는 testing-test+test2;test_3;untested
두 번째 항목만 test
앞뒤에 단어 문자가 없기 때문에 일치합니다.
공백으로 구분된 단어를 일치시키려면 다음을 지정해야 합니다.주위를 둘러보세요grep
수동 어설션 및 모든 구현이 지원하지 않는 기능을 위해 Perl 호환 정규식이 필요합니다 . grep='grep --color
별칭이 있는 것 같으므로 / 옵션을 grep
지원 하는 경우 --color
해당 옵션도 지원할 수 있습니다. 그러면 다음을 수행할 수 있습니다.-P
-X perl
grep --color -P '(?<!\S)test(?!\S)'
(?<!...)
그리고 (?!...)
각각Perl 정규 표현식의 부정형 뒤돌아보기 및 미리보기 어설션 연산자. , POSIX 일치 및 공백이 아닌 문자 \S
와 같습니다 . [^[:space:]]
즉, " test
공백이 아닌 문자가 앞이나 뒤에 오지 않는 한 일치합니다."
답변2
Perl 정규식( -P
플래그와 함께 GNU grep에서 지원됨)을 사용하면 부정적인 뒤돌아보기 및 미리보기를 사용하여 test
인접하지 않은 일치 항목을 주장할 수 있습니다 -
.
echo "test-test test" | grep -P '(?<!-)test(?!-)'
이 출력
시험을 받다시험
답변3
확장 정규식을 사용하면 다음과 같이 구현할 수 있습니다.
grep -E "(^| )test( |$)"
이는 실제로 선행 또는 훈련 공간을 강조 표시하지만 인쇄 가능한 문자가 아니기 때문에 표시되지 않습니다.
답변4
사용진주:
~$ echo "test-test test\ntest\n\n" | perl -lpe 's/(?<!\S)(test)(?!\S)/**$1**/g;'
test-test **test**
**test**
사용행복하다:
~$ echo "test-test test\ntest\n\n" | raku -pe 's:g/ <!after \S > (test) <!before \S > /**$0**/;'
test-test **test**
**test**
[ 답변 grep
에서 Perl 스타일 Lookaround에 대해 자세히 설명한 @StéphaneChazelas에게 특별히 감사드립니다.]
강조 표시와 비슷한 것을 원한다면 여기에 간단한 아이디어가 있습니다.펄 몽크스. grep
Perl/Raku를 사용하고 색상 옵션 대신 별표로 일치 항목을 둘러쌉니다 **
.
after
Raku 참고: Raku에서는 Lookbehinds의 철자가 긍정적이고 부정적인 ?
반면, Lookaheads의 철자는 Raku의 긍정적인 및 부정적입니다 !
. 따라서 위의 Raku 코드를 직접 읽을 수 있습니다.before
?
!
after
" 공백이 아닌 문자나 공백이 아닌 문자가 아닌 "test"라는 단어의 발생을 전역적으로 바꿉니다 before
...".
https://perldoc.perl.org/perlre#Lookaround-Assertions
https://docs.raku.org/언어/regexes#Lookahead_assertions
https://docs.raku.org/언어/regexes#Lookbehind_assertions