Grep - 返回文件的行号和名称



我的目录中有许多日志文件。我正在尝试编写一个脚本来搜索所有日志文件中的字符串,并回显文件名和找到字符串的行号。

我想我可能不得不使用 2 个 grep - 将一个的输出管道到另一个,因为 -l 选项只返回文件名,而没有关于行号的任何内容。任何关于我如何成功实现这一目标的见解将不胜感激。

非常感谢,

亚历克斯

$ grep -Hn root /etc/passwd
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash

-H-n结合起来可以满足您的期望。

如果要回显没有字符串的所需信息:

$ grep -Hn root /etc/passwd | cut -d: -f1,2
/etc/passwd:1

或带awk:

$ awk -F: '/root/{print "file=" ARGV[1] "nline=" NR}' /etc/passwd
file=/etc/passwd
line=1

如果要创建shell变量:

$ awk -F: '/root/{print "file=" ARGV[1] "nline=" NR}' /etc/passwd | bash
$ echo $line
1
$ echo $file
/etc/passwd

使用 -H . 如果您使用的是没有 -H 的 grep,请指定两个文件名。 例如:

grep -n pattern file /dev/null

我的 grep 版本不断从匹配行返回文本,我不确定您是否在追求...... 您还可以通过管道将输出传输到 awk 命令,使其仅打印文件名和行号

grep -Hn "text" . | awk -F: '{print $1 ":" $2}'

相关内容

  • 没有找到相关文章

最新更新