ChatGPT解决这个技术问题 Extra ChatGPT

如何格式化我的 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,而且我不知道如何添加行号。

我能做些什么?


V
VanagaS

-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

我可以通过在 : 之后而不是之前添加行号来格式化它吗?
您的解决方案看起来不错,但出现错误 awk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
抱歉切换到 linux 现在它的工作:) 它是 Windows 版本不太好
...说-ni的骑士就是你记住这个技巧的方式
A
Andy Lester

使用 -n--line-number

查看 man grep 了解更多选项。


新的 linux 用户懒得阅读手册页。但是如果他们使用 linux 足够多,他们会习惯的 :) 它超级有用 :)
并不总是懒惰,(但有时),通常是新的 Linux 用户难以理解手册页。 (它们看起来很神秘)
有时手册页可能需要很多页。这很难读完所有这些
j
jhenninger

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

我不认为 grep 有一个开关来打印匹配的总行数,但是您可以将 grep 的输出通过管道传输到 wc 来完成此操作:

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

-c 将打印匹配的总行数
你说的对。不幸的是,它也抑制了正常输出。
Z
Zsolt Botykai

或改用 awk

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

g
ghostdog74

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"

h
hannes

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

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

V
Vrushal Raut

请参阅此链接以获取 linux 命令 linux http://linuxcommand.org/man_pages/grep1.html

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

grep -irn "YourStringToBeSearch"

a
alo Malbarez

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

egrep -ne 'null|three'

将会呈现:

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

egrep -ne 'null|three' | less

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

HTH君