首页 > 解决方案 > 如何打印与特定字符串匹配的所有行?

问题描述

我打算打印所有行及其行号及其在与特定字符串匹配的特定目录中的位置

例子..

/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 中运行的东西

标签: linuxawkprintinggrepfind

解决方案


正如评论中所建议的,可以使用 grep 非常有效地执行此操作

grep -IHnr "Text to find" .

-I : Process a binary file as if it did not contain matching data (to exclude binary files)

-H : Print the filename for each match

-n : Display the matched lines and their line numbers

-r : Recursively search subdirectories listed

"Text to find" : Search string

. : Directory for search (current directory)


推荐阅读