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

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

7줄이 포함된 파일이 있다고 가정해 보겠습니다. 예를 들어:

a
b
c
#

d
e

실행하면 grep -c '#' -c -v filenamehere 6개의 행이 표시됩니다.

공백을 제거하기 위해 5줄을 표시하고 싶습니다.

답변1

귀하의 파일에는일곱하지만 비어 있지 않고 로 시작하지 않는 줄을 계산하려고 합니다 #.

$ grep -c '^[^#]' file
5

처음에 문자가 아닌 문자가 포함된 줄 수를 계산합니다 #.

이 표현식은 [^#]가 아닌 단일 문자와 일치합니다 #. 전체 표현식이 줄의 시작 부분과 일치하지 않습니다 ^[^#].#

빈 줄은 이 표현식과 일치하지 않으며 #¹으로 시작하는 줄도 일치하지 않습니다.

비어 있지 않은 줄만 계산하려면 다음을 수행하세요.

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

관련 정보