Grep - 返回行号和文件名

Ale*_*amb 1 unix linux bash shell

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

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

非常感谢,

亚历克斯

Gil*_*not 5

$ grep -Hn root /etc/passwd
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash
Run Code Online (Sandbox Code Playgroud)

结合-H-n做你期望的事.

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

$ grep -Hn root /etc/passwd | cut -d: -f1,2
/etc/passwd:1
Run Code Online (Sandbox Code Playgroud)

或者使用:

$ awk -F: '/root/{print "file=" ARGV[1] "\nline=" NR}' /etc/passwd
file=/etc/passwd
line=1
Run Code Online (Sandbox Code Playgroud)

如果要创建shell变量:

$ awk -F: '/root/{print "file=" ARGV[1] "\nline=" NR}' /etc/passwd | bash
$ echo $line
1
$ echo $file
/etc/passwd
Run Code Online (Sandbox Code Playgroud)