我如何格式化我的grep输出显示行号在行结束,也是命中计数?

我正在使用grep匹配文件中的字符串。下面是一个示例文件:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt回报

example two null,
example four null,

如何像这样返回匹配的行及其行号:

  example two null, - Line number : 2
example four null, - Line number : 4
Total null count : 2

我知道-c返回全部匹配的行,但我不知道如何正确格式化它,在前面添加total null count,我不知道如何添加行号。

我该怎么办?

402945 次浏览

使用-n--line-number

查看man grep以获得更多选项。

-n返回行号。

-i代表忽略大小写。仅在不需要进行大小写匹配时使用

$ grep -in null myfile.txt


2:example two null,
4:example four null,

结合awk来打印匹配后的行号:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'


example two null, - Line number : 2
example four null, - Line number : 4

使用命令替换打印出null总数:

$ echo "Total null count :" $(grep -ic null myfile.txt)


Total null count : 2

使用grep -n -i null myfile.txt来输出每个匹配前的行号。

我不认为grep有一个开关来打印匹配的总行数,但你可以把grep的输出管道到wc来完成:

grep -n -i null myfile.txt | wc -l

grep查找行并输出行号,但不允许你“编程”其他东西。如果你想包含任意文本并进行其他“编程”,你可以使用awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

或者只使用shell(bash/ksh)

c=0
while read -r line
do
case "$line" in
*null* )  (
((c++))
echo "$line - Line number $c"
;;
esac
done < "file"
echo "total count: $c"

或者使用awk代替:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

或者在perl中(为了完整…):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'

linux命令参考此链接 http://linuxcommand.org/man_pages/grep1.html < / p >

要显示行号,代码行和文件,请在终端中使用此命令或cmd, GitBash(由终端提供)

grep -irn "YourStringToBeSearch"

我只是想帮你做点事。要搜索多个字符串和输出行号并浏览输出,输入:

egrep -ne 'null|three'

将显示:

2:example two null,
3:example three,
4:example four null,

egrep -ne 'null|three' | less

将显示输出在一个更少的会话

< p > HTH 小君< / p >