grep이 줄당 최소 문자 수는 얻을 수 있지만 최대 문자 수는 얻을 수 없는 이유는 무엇입니까?

grep이 줄당 최소 문자 수는 얻을 수 있지만 최대 문자 수는 얻을 수 없는 이유는 무엇입니까?

Mac의 Bash에서 이 작업을 수행할 수 있습니다.

grep ".\{81,\}" foo.txt

81자 이상을 포함하는 파일의 모든 행을 가져오고 foo.txt다음을 사용하려면:

grep -v ".\{81,\}" foo.txt

최대 80자 길이의 모든 줄을 가져옵니다. ( -v"반대로")

하지만 내가 사용한다면

grep ".\{,81\}" foo.txt

그것은 말할 것입니다 grep: invalid repetition count(s).

내가 사용한다면

grep ".\{0,81\}" foo.txt

길이에 관계없이 모든 줄을 제공합니다.

위의 마지막 두 양식을 어떻게 작동시키나요? 정규식 형식을 따릅니다.

.{,80}

80자 이하의 모든 문자를 나타냅니다.

답변1

grep ".\{0,81\}" foo.txt

모든 행이 이와 일치합니다. 줄에 82자가 있으면 줄도 81자가 됩니다. 당신이 필요로 할:

  • 줄의 처음부터 끝까지 0~81자가 되도록 정규식을 ^and 로 묶습니다. 또는$
  • 행이 이 정규 표현식과 정확히 일치해야 함을 지정 하는 데 사용됩니다 -x(위 옵션과 동일).

그래서:

grep "^.\{0,81\}$" foo.txt
grep -x ".\{0,81\}" foo.txt

답변2

모든 UNIX 시스템의 모든 쉘에서 awk를 사용하십시오.

$ printf 'abcdef\nABC\n' | awk 'length($0) > 3'
abcdef
$ printf 'abcdef\nABC\n' | awk 'length($0) < 3'
$
$ printf 'abcdef\nABC\n' | awk 'length($0) <= 3'
ABC

간단하게 생각하고 기억하세요속담처럼:

어떤 사람들은 문제에 직면했을 때 "알겠습니다. 정규식을 사용하겠습니다"라고 생각합니다. 이제 그들은 두 가지 문제를 안고 있습니다.

관련 정보