이것은 명령입니다:
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