如何打印与特定字符串匹配的所有行?

问题描述 投票:0回答:2

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

示例..

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

linux awk printing grep find
2个回答
4
投票

正如评论中所建议的,可以使用 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)


0
投票

我不会将所有内容都压缩到一个命令中。编写一个结合了多个实用程序的小型 shell 脚本会更简单。例如,

$ cat script.sh
#!/bin/sh   
IFS='
'
for i in `find . -type f`
do
    awk '
    /Text To Find/ {
        print FILENAME, NR
    }' "$i"
done
$ chmod +x script.sh
$ ./script.sh 
./script.sh 7
© www.soinside.com 2019 - 2024. All rights reserved.