Bash 질문의 Grep

Bash 질문의 Grep

예시 문자열:

--000000000000f104a6057d4a0a10

여기서 결정해야 할 사항은 ' --' 입니다.

동일한 파일에는 유사한 문자열도 많이 포함되어 있으며 ------=_현재 --=_반환 됩니다 -----------. --<따라서 정규 표현식이 적합해야 합니다. 현재 나는 그것들도 얻습니다 :(

내가 가진 정규 표현식: ^--\w+위와 같이 예상된 결과로 grep에서는 실패하지만 Gedit, Bluefish... grep: grep -r '^--\w+' file..에서는 작동하며 결과가 반환되지 않고 grep -r '^--' file많은 오류가 발생합니다.

유사하지만 더 복잡한 또 다른 예: 문자열 예:

--b1_3445ee3d64c0259d451a115045580266

이 부분을 식별하십시오.--b1_....

답변1

기본적으로 Standard는 grepPerl과 유사한 정규식(PCRE)을 이해하지 못합니다. 예를 들어 GNU는 표준 동작의 확장인 \w기본 및 확장 정규식 (및 )도 grep처리합니다 . 다른 PCRE는 해당 옵션을 사용하여 GNU에서 활성화됩니다 .\w\Wgrep-P

명령이 아무것도 반환하지 않는 이유는 +확장 정규식 연산자이고 -EGNU에서 작동해야 하기 때문입니다 grep.

grep -E '^--\w+' file

그렇지 않은 경우 -E표현식은 --W+문자 그대로 일치를 시도합니다( W단일 문자가 일치하는 경우 \w).

또한 다음과 같이 표현식을 끝에 고정할 수도 있습니다.

grep -E '^--\w+$' file

그렇지 않으면 \w나중에 문자가 아닌 줄을 포함하는 줄과 일치하게 됩니다.

--00000000=

또는 다음을 사용할 수 있습니다.

grep -xE -e '--\w+' file

그것은 같은 일을 합니다. 이 -x옵션은 전체 라인 일치를 강제합니다. 패턴이 대시로 시작하므로 -e명령줄 옵션과 표현식을 구분해야 합니다.

GNU는 grep또한 \+기본 정규식을 이해합니다( 또는 grep없이 사용하는 경우에도 ).-E-P

grep -x -e '--\w\+' file

\{1,\}아니면 대신 사용할 수도 있습니다 \+.


GNU가 아닌 경우 grep(그리고GNU grep) 대신 다음을 사용할 수 있습니다 [[:alnum:]_](문자나 숫자 또는 여기에 포함된 밑줄과 일치) \w.

grep -xE -e '--[[:alnum:]_]+' file

16진수와 밑줄을 일치시키려면 다음을 사용하십시오 [[:xdigit:]_].

grep -xE -e '--[[:xdigit:]_]+' file

또는,

LC_ALL=C grep -xE -e '--[0-9a-fA-F_]+' file

LC_ALL문자 범위는 로케일에 따라 다르기 때문에 명령의 to C(또는 to POSIX) 설정이 필요합니다.grep

답변2

  • 확장 정규식 사용
grep -E '^--\w+'
egrep '^--\w+'
  • 또는 반복 연산자를 탈출하세요
grep '^--\w\+'

관련 정보