grep: \{\}의 내용이 잘못되었습니다.

grep: \{\}의 내용이 잘못되었습니다.

이것은 명령입니다:

grep '\(2\)[[:digit:]]\{\1\}' numbers

내가 원하는 것은 숫자 "2" 다음에 정확히 2자리 숫자를 일치시키는 것입니다. 표현식에서 숫자 "2"를 "3"으로 변경하면 3자리 숫자와 일치하고, 그렇다면... 그런 다음 4자리 숫자와 일치합니다.

여기서는 역참조를 사용하고 있지만 이 명령을 실행하면 다음과 같은 출력이 표시됩니다.

grep: invalid content of \{\}

내 표정이 어떻게 바뀔 수 있니?

첫 번째 해결 방법: Serge가 대답했듯이:

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}

이것은 실제로 작동하지만 첫 번째 하위 표현식이 있다고 가정하면 \(34\)해당 숫자를 역참조하여 34개(또는 그 이상) 사례를 구현할 필요가 없습니다.

답변1

여기서는 역참조가 허용되지 않습니다. 가능한 모든 상황을 설명하는 표현식을 작성해야 합니다. 예를 들면 다음과 같습니다.

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}

답변2

행의 실제 첫 번째 번호를 기준으로 결정하는 대신 첫 번째 값을 하드코딩하려는 것 같습니다. 다음과 같은 것을 고려해보세요:

HOWMUCH=2 grep "\($HOWMUCH\)[[:digit:]]\{$HOWMUCH\}" numbers

관련 정보