따라서 단어의 시작 부분을 특정 문자와 일치시키려면 , \<
ex, 를 사용할 수 있다는 것을 알고 있습니다 \<Aa
. 그 반대의 경우도 마찬가지입니다. 단어 끝의 경우 \>
. 이 두 명령을 어떻게 결합합니까?
예를 들어 이렇게 하면 \<Aag\>
해당 단어만 일치합니다. 이 두 명령을 분리하는 방법이 있습니까?
답변1
\<
및 연산자는 가 있거나 없는 일부 구현에서 확장으로 발견되는 \>
일부 비표준 정규식 연산자입니다 .grep
-E
대부분의 구현에서는 단어가 아닌 문자(또는 주제의 시작)와 단어 문자 사이의 경계 및 단어 문자와 단어가 아닌 문자(또는 주제의 끝) 사이의 경계에서 일치합니다. 여기서 단어 문자는 영숫자 문자 또는 밑줄입니다.
일부 grep
/regexp 구현에는 [[:<:]]
및 [[:>:]]
대신 및 일부 구현에는 \b
두 유형 중 하나와 일치하는 경계가 있습니다(perl에서).
이들 중 하나를 지원하는 사람들은 일반적으로 -w
단어 일치 옵션도 지원합니다.
\<Aag\>
내부 일치는 foo-Aag
과 사이의 일치 \<
, 항목(항목이 있는 행) 사이의 일치입니다.-
A
\>
g
grep
일부 grep
구현에서는 \w
단일 단어 문자 일치도 지원합니다. 따라서 Aa
로 시작하고 끝나는 단어를 찾으려면 에 해당하는 표준 단어를 g
사용할 수 있으므로 이식성 이 약간 더 좋습니다. 일부 구현의 경우 또는 및 해당 항목이 필요할 수 있습니다 .\<Aa\w*g\>
\w
[[:alnum:]_]
\<Aa[[:alnum:]_]*g\>
\bAa[[:alnum:]_]*g\b
[[:<:]]
[[:>:]]
표준에서는 다음을 grep
사용할 수 있습니다.
grep -E '(^|[^[:alnum:]_)Aa[[:alnum:]_]*g([^[:alnum:]_]|$)'
또는:
grep -x '\(.*[^[:alnum:]_]\)\{0,1\}Aa[[:alnum:]_]*g\([^[:alnum:]_].*\)\{0,1\}'
기본 BRE를 사용합니다.
Perl 정규식을 grep
지원 한다면-P
grep -P '\bAa\w*g\b'
또는:
grep -Pw 'Aa\w*g'
작동합니다. 아니면 실제를 사용할 수도 있습니다:
perl -ne 'print if /\bAa\w*g\b/'
(그러나 기본적으로 \w
ASCII 문자만 일치한다는 점에 유의하십시오.)