예시 문자열:
--000000000000f104a6057d4a0a10
여기서 결정해야 할 사항은 ' --
' 입니다.
동일한 파일에는 유사한 문자열도 많이 포함되어 있으며 ------=_
현재 --=_
반환 됩니다 -----------
. --<
따라서 정규 표현식이 적합해야 합니다. 현재 나는 그것들도 얻습니다 :(
내가 가진 정규 표현식: ^--\w+
위와 같이 예상된 결과로 grep에서는 실패하지만 Gedit, Bluefish... grep: grep -r '^--\w+' file
..에서는 작동하며 결과가 반환되지 않고 grep -r '^--' file
많은 오류가 발생합니다.
유사하지만 더 복잡한 또 다른 예: 문자열 예:
--b1_3445ee3d64c0259d451a115045580266
이 부분을 식별하십시오.--b1_....
답변1
기본적으로 Standard는 grep
Perl과 유사한 정규식(PCRE)을 이해하지 못합니다. 예를 들어 GNU는 표준 동작의 확장인 \w
기본 및 확장 정규식 (및 )도 grep
처리합니다 . 다른 PCRE는 해당 옵션을 사용하여 GNU에서 활성화됩니다 .\w
\W
grep
-P
명령이 아무것도 반환하지 않는 이유는 +
확장 정규식 연산자이고 -E
GNU에서 작동해야 하기 때문입니다 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\+'