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