7줄의 파일이 있다고 가정해 보겠습니다. 예:
a
b
c
#
d
e
실행하면 grep -c '#' -c -v filenamehere
6줄이 나옵니다.
그 공백을 없애기 위해 5줄을 표시하고 싶습니다.
답변1
귀하의 파일에는일곱하지만 비어 있지 않고 로 시작하지 않는 줄의 개수를 계산하려고 합니다 #
.
$ grep -c '^[^#]' file
5
문자가 아닌 문자가 시작 부분에 포함된 줄 수를 계산합니다 #
.
표현식은 [^#]
가 아닌 단일 문자와 일치합니다 #
. 전체 표현식은 줄 시작 부분의 ^[^#]
non-와 일치합니다 .#
빈 줄은 이 표현식과 일치하지 않으며 #
¹으로 시작하는 줄도 일치하지 않습니다.
비어 있지 않은 줄만 계산하려면 다음을 수행하세요.
$ grep -c '.' file
6
최소한 하나의 문자가 포함된 줄의 수를 셉니다.
완전성을 위해 빈 줄을 계산하려면 다음을 수행하십시오.
$ grep -c -v '.' file
1
비어 있거나 다음으로 시작하는 줄을 계산하려면 다음을 수행하세요 #
.
$ grep -c -v '^[^#]' file
2
-c
및 둘 다 -v
"전역" 옵션입니다. grep
명령줄에 입력하면 전체 작업의 동작이 변경됩니다 . -c
또는 여러 번 지정하는 것은 의미가 없으며 -v
옵션 인수를 사용하지 않습니다.
또한 모든 옵션 뒤의 첫 번째 인수가 아닌 다른 곳에 패턴이나 정규식을 지정하는 경우 이것이 검색 대상 패턴임을 알 수 -e 'pattern'
있도록 사용하십시오. grep
즉, 다음 중 하나를 사용하십시오.
grep -e '.' -c -v file
또는
grep -c -e '.' -v file
또는
grep -c -v '.' file
GNU는 grep
옵션이 경로 이름 피연산자 앞에 오도록 명령줄을 재배열하지만( POSIXLY_CORRECT
환경에 설정되지 않은 경우) 일반적으로 어떤 grep
구현에서도 작동하는 이식 가능한 쉘 코드를 작성하려고 합니다.
문자가 아닌 문자(사용자의 로케일 참맵에서 유효한 문자를 형성하지 않는 일련의 바이트)로 시작하는 ¹ 줄도 대부분의 grep
구현에서 제외됩니다. LC_ALL=C grep
이 문제를 해결하는 데 사용할 수 있습니다 . 이는 #
이식 가능한 문자 집합의 일부이므로 유효한 작업 이므로 특정 시스템의 로케일 전체에서 변하지 않아야 합니다.