처음으로 grep을 사용하는데 매뉴얼을 읽은 후 숫자를 일치시키기 위해 \d나 [0-9] 대신 [:digit:]를 사용하기로 결정했습니다. grep에서 실제로 숫자와 일치하는 것은 [[:digit:]]라는 것을 알았습니다. 이중 괄호가 있는 이유를 이해했지만 여러 정수를 일치시키는 방법을 찾을 수 없습니다.
echo 'i100s'|grep -o '[[:digit:]]'
(예상대로) 인쇄됩니다:
1
0
0
하지만 내가 시도하면
echo 'i100s'|grep -o '[[:digit:]]+'
또는
echo 'i100s'|grep -o '[[:digit:]]{0,3}'
또는
echo 'i100s'|grep -o '[[:digit:]]\+'
echo 'i100s'|grep -o '[[:digit:]]\{0,3\}'
아무것도 일치하지 않습니다. 왜?
답변1
+ 연산자는 가장 오래된 grep 버전 이후의 혁신입니다. 이전에는 +를 단일 인스턴스로 표현하고 그 뒤에 *를 사용하여 동일한 인스턴스를 표현해야 했습니다. 별로 우아하지 않습니다. 분명히 범위 연산자도 같은 범주에 속합니다. 검색할 때 앞에 \v(vim의 -E와 동일)를 붙이지 않는 한 Vim에서도 동일한 문제가 발생합니다.
John1024가 지적했듯이 Mac에서는
$echo 'i100s'| grep -Eo '[[:digit:]]+'
100
$echo 'i100s'| egrep -o '[[:digit:]]+'
100
gnu grep에 대한 문서(Mac에서 homebrew 또는 기타 패키지 관리자를 통해 사용 가능)에 따르면 기본 동작은 -F(기본 정규 표현식 가정)이지만 john1024가 말했듯이 내 경험에 따르면 -E를 사용하지 않는 동안 고급 표현식을 지원한다는 것입니다. 또는 egrep
변형. homebrew를 사용하여 gnu grep 을 설치하면 유용 하게 ggrep
.grep
ggrep