문자로 시작하고 끝나는 단어를 찾는 grep 명령

문자로 시작하고 끝나는 단어를 찾는 grep 명령

따라서 단어의 시작 부분을 특정 문자와 일치시키려면 , \<ex, 를 사용할 수 있다는 것을 알고 있습니다 \<Aa. 그 반대의 경우도 마찬가지입니다. 단어 끝의 경우 \>. 이 두 명령을 어떻게 결합합니까?

예를 들어 이렇게 하면 \<Aag\>해당 단어만 일치합니다. 이 두 명령을 분리하는 방법이 있습니까?

답변1

\<및 연산자는 가 있거나 없는 일부 구현에서 확장으로 발견되는 \>일부 비표준 정규식 연산자입니다 .grep-E

대부분의 구현에서는 단어가 아닌 문자(또는 주제의 시작)와 단어 문자 사이의 경계 및 단어 문자와 단어가 아닌 문자(또는 주제의 끝) 사이의 경계에서 일치합니다. 여기서 단어 문자는 영숫자 문자 또는 밑줄입니다.

일부 grep/regexp 구현에는 [[:<:]][[:>:]]대신 및 일부 구현에는 \b두 유형 중 하나와 일치하는 경계가 있습니다(perl에서).

이들 중 하나를 지원하는 사람들은 일반적으로 -w단어 일치 옵션도 지원합니다.

\<Aag\>내부 일치는 foo-Aag과 사이의 일치 \<, 항목(항목이 있는 행) 사이의 일치입니다.-A\>ggrep

일부 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/'

(그러나 기본적으로 \wASCII 문자만 일치한다는 점에 유의하십시오.)

관련 정보