
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
간단하게 생각하고 기억하세요속담처럼:
어떤 사람들은 문제에 직면했을 때 "알겠습니다. 정규식을 사용하겠습니다"라고 생각합니다. 이제 그들은 두 가지 문제를 안고 있습니다.