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

标签 linux bash shell unix

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

我想我可能不得不使用 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 -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

关于linux - Grep - 返回文件的行号和名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462979/

相关文章:

c - 在 Linux 中用 C 语言获取主音量

bash - 通过 bash 使用 rm 命令删除 5 天前的文件

linux - 命令的管道结果作为参数

linux - JSON 转义 CURL/JQ 输出

javascript - 如何访问shell脚本文件中的 Node JS(javascript)变量

python - 使用 django-users2 时无法导入 users.form

linux - 在 ARM 架构上安装 Open Dylan

java - 构建后如何从 TeamCity 将 java .war 文件部署到 Linux 服务器?

linux - 在解析(即扩展)通配符时停止 Linux shell

linux - 在 bash/sh 中分别通过管道传输 stderr 和 stdout