문자 클래스 정규식 난독화

문자 클래스 정규식 난독화

grep에서 정규식을 축약하려고 합니다. 정확히 6개의 공백과 알파벳 문자가 일치해야 합니다. 이것은 작동합니다:

grep "^\s\s\s\s\s\s[[:alpha:]]" <filename>

다음은 수행되지 않습니다.

grep "^[[:space:]]{6}[[:alpha:]]" <filename>

내가 뭘 잘못했나요?

답변1

{6}기본 정규식에 영향을 주지 않는 확장된 정규식 "바인딩"입니다( {6}문자 그대로 일치함). 이 grep유틸리티는 기본적으로 기본 정규식을 사용합니다.

두 가지 솔루션:

  1. 반대의 경우를 사용하면 \{6\}기본 정규 표현식으로 작성할 수 있습니다.
  2. 을 사용 grep -E하여 을 허용합니다 grep.

[[:space:]]또는 공백(다른 문자 제외 , \sGNU에서는 grep공백, 세로/가로 탭, 양식 피드, 개행 및 캐리지 리턴)을 일치시키려면 리터럴 공백을 사용하십시오 . 예를 들어,

grep -E '^ {6}[[:alpha:]]'

관련된:

답변2

Kusalananda가 말한 것에 덧붙여, 이것은 깃발 egrep을 다루고 싶지 않은 경우에 작동합니다.-E

관련 정보