我的目录中有许多日志文件。我正在尝试编写一个脚本来搜索所有日志文件中的字符串,并回显文件名和找到字符串的行号。
我想我可能不得不使用 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}'