如何格式化我的grep输出以在行尾显示行号以及点击数?


378

我正在使用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到前面,并且我也不知道如何添加行号。

我能做什么?

Answers:


600

-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

使用命令替换来打印总的空计数:

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

Total null count : 2

我可以通过以下方式而不是之前添加行号来格式化此格式?
伦敦2010年

您的解决方案看起来不错,但会收到错误消息awk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
伦敦,2010年

抱歉,现在改用linux了:)这不是Windows版本
伦敦,2010年

1
...说那-ni是您如何记住这个技巧的骑士
圣地亚哥·阿里斯蒂

59

使用-n--line-number

查看man grep更多选项。


3
新的Linux用户懒于阅读手册页。但是,如果他们足够使用Linux,他们就会习惯了:)它非常有用:)
Dzung Nguyen 2012年

19
(但有时)并不总是那么懒惰,通常是新Linux用户在理解手册页时遇到了麻烦。(他们看起来似乎很神秘)
TecBrat 2013年

有时手册页可以占用许多页。这是很难读懂所有的人
尤金Konkov

7

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

我不认为grep可以切换打印匹配的总行数,但是您可以将grep的输出通过管道传输到wc来完成:

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

3
-c将打印匹配的
总行

你是对的。不幸的是,它也抑制了正常输出。
jhenninger 2010年

7

awk改为使用:

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

4

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"

3

或在perl中(为了完整性...):

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


1

只是以为我会在将来对您有所帮助。要搜索多个字符串和输出行号并浏览输出,请键入:

egrep -ne 'null|three'

将会呈现:

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

egrep -ne 'null|three' | less

将在较少的会话中显示输出

HTH Jun

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.