【发布时间】:2020-09-03 15:18:24
【问题描述】:
我打算打印所有行及其行号及其在与特定字符串匹配的特定目录中的位置
示例..
/home/some_dir/file.txt -(LineNo) -(printing_thatlineitself)
我目前有 2 个命令,但都有一些缺点
find /home/some_dir -type f -exec grep -Hn "Text To Find" {} \;
上面的这个 find 命令似乎可以正常工作,但问题是它工作很慢
find /home/some_dir -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find"
此命令的运行速度相对较快,但它提供的结果不准确。它甚至打印我输入的字符串根本不存在的那些行
谁能提供一个既准确又快速的解决方案? PS / 如果解决方案不使用 find 命令来实现这一点,那很好。它必须是我可以直接在 CLI 中运行的东西
【问题讨论】:
-
-C2出现在第二个命令中,但不是第一个...要使第一个命令运行得更快,请使用{} +... 如果您的内容是 ASCII,请使用LC_ALL=C grep以获得更快结果..另一个建议是使用ripgrep而不是find+grep -
grep可以自行递归搜索,试试grep -IHnr "my regex" /home/some_dir/。如果您想找到一个简单的文本,您也可以使用-F,这表明您正在寻找固定字符串而不是正则表达式。 -
grep -IHnr "Text to find" .是完成这项工作的强大而快速的方法。- -
xargs解决方案更快可能不是真的,尽管在某些情况下它可能会更早开始打印结果。
标签: linux awk printing grep find