Answers:
标准方法是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:]]
。请注意,%
由于您的示例中没有此内容,因此我也删除了与匹配的内容。
史蒂文·D(Steven D)忘记了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
纯(ba)sh 之外,它们中的任何一个本身是否有用(与构建程序所基于的东西相比,行数更多)?
sed 's/.*//' file.txt | uniq -c
uniq -c -w 0 file.txt
而且您只能cut -c -7
保留该号码。或者,更POSIXly :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