답변:
표준 방법은 with로 wc
계산할 대상 (바이트, 문자, 단어 등)을 지정하는 인수를 사용합니다. -l
라인입니다 :
$ wc -l file.txt
1020 file.txt
cat matlab.git.diff | sed -e '/^\+[ ]*.*\%$/d' | wc -l
. /regexp/d
일치하는 경우 광고를 삭제 regexp
하고 -e
대한 적절한 (IMNSHO) 구문 온 regexp
.
grep -v '^+ *%' matlab.git.diff | wc -l
않습니까?
grep
와 같은 코멘트 사례로 고려하기 위해 명령을 " + Hello"
(전과 공간 (들)주의 +
)?
grep -v '^ *+' matlab.git.diff | wc -l
(나는 인용 부호가 실제로 라인의 일부가 될 운명되지 않은 있으리라 믿고있어, 나는 또한와의 앞에 공백없이 두 라인이 있다고 가정 +
의견으로 의미;의 경우 별표를 *
으로 바꾸거나 별표 \+
앞에 다른 공간을 추가 하면 하나 이상의 공백이 필수 입니다. 공백 만 일치시키는 대신 임의의 공백을 일치 시키려고합니다. 이를 위해 공백을로 바꿉니다 [[:space:]]
. %
귀하의 예에 없기 때문에 일치도 제거 했습니다.
마이클이 말했듯 wc -l
이 갈 길입니다. 그러나, 단지 경우에 당신은 알수없는이 bash
, perl
또는 awk
하지만 wc
, 여기에 몇 가지 더 해결 방법은 다음과 같습니다
$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT
$ perl -lne 'END { print $. }' file.txt
그리고 훨씬 덜 읽기 쉽습니다.
$ perl -lne '}{ print $.' file.txt
$ awk 'END {print NR}' file.txt
스티븐 디는 GNU를 잊었다 sed
.
sed -n '$=' file.txt
또한 파일 이름을 출력하지 않고 카운트를 원하고 다음을 사용하는 경우 wc
:
wc -l < file.txt
그냥 그것을 위해 :
cat -n file.txt | tail -n 1 | cut -f1
grep -c ''
, 또는 tr -dc '\n' | wc -c
, 또는 nl -ba -nln | tail -n 1 |sed -e 's/[^0-9].*//'
... ... 이것들 자체가 유용 wc -l
합니까?
sed 's/.*//' file.txt | uniq -c
uniq -c -w 0 file.txt
당신은 할 수 있습니다 cut -c -7
만 수를 유지합니다. 또는 POSIX 더 : uniq -c file.txt | awk '{c+=$1}END{print c}'
. 방법에 대해 dc
(가 POSIX 아니더라도)? uniq -c file.txt | cut -c -7 | sed '$alax' | dc -e '[pq]sb[+z1=blax]sa' -
. bc
POSIX : uniq -c file.txt | cut -c -7 | sed -n ':a;${s/\n/ + /gp;b};N;ba' | bc
입니다. 줄 길이를 제한한다고 가정하면 쉽게 답할 수 있습니다 uniq -c -f 100000 file.txt
.
사용할 때 경고의 말씀
wc -l
wc -l은 \ n을 계산하여 작동하기 때문에 파일의 마지막 줄이 줄 바꿈으로 끝나지 않으면 줄 수는 1만큼 줄어 듭니다.
주어진 파일이 줄 바꿈으로 마지막 줄을 끝내는 규칙을 따르는 지 여부를 확신 할 수 없으므로 줄 바꿈과 상관없이 마지막 줄을 포함하는 대체 명령을 사용하는 것이 좋습니다.
sed -n $= filename
perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename