빈 줄을 계산하지 않고 파일의 줄 계산

빈 줄을 계산하지 않고 파일의 줄 계산

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이 문제를 해결하는 데 사용할 수 있습니다 . 이는 #이식 가능한 문자 집합의 일부이므로 유효한 작업 이므로 특정 시스템의 로케일 전체에서 변하지 않아야 합니다.

관련 정보