在目标目录/和打印(Bash)中的所有文件上搜索input.file中的所有字符串

在目标目录/和打印(Bash)中的所有文件上搜索input.file中的所有字符串,bash,recursion,input,grep,find,Bash,Recursion,Input,Grep,Find,我需要搜索目标目录中的所有文件,并打印输入文件中找到的所有匹配字符串。似乎做不到。下面是一个示例场景和问题: $ tree . . ├── input_file.txt └── target-dir ├── target-file-A.txt ├── target-file-B.txt ├── target-subdir-A │ ├── target-file-A.txt │ └── target-file-B.txt └── target

我需要搜索目标目录中的所有文件,并打印输入文件中找到的所有匹配字符串。似乎做不到。下面是一个示例场景和问题:

$ tree .
.
├── input_file.txt
└── target-dir
    ├── target-file-A.txt
    ├── target-file-B.txt
    ├── target-subdir-A
    │   ├── target-file-A.txt
    │   └── target-file-B.txt
    └── target-subdir-B
        ├── target-file-A.txt
        └── target-file-B.txt

$ cat input_file.txt
abc
cba
bca
acb

$ cat target-dir/target-file-A.txt
abc
cba
bca
acb
$ cat target-dir/target-file-B.txt
acb
cba
abc
bca
0101
1010

$ grep -f input_file.txt -r .

./input_file.txt:acb

./target-dir/target-file-A.txt:acb
./target-dir/target-file-B.txt:acb

./target-dir/target-subdir-A/target-file-A.txt:acb
./target-dir/target-subdir-A/target-file-B.txt:acb

./target-dir/target-subdir-B/target-file-A.txt:acb
./target-dir/target-subdir-B/target-file-B.txt:acb
我只看到一行匹配的打印(第一行),其余的被忽略。如何打印所有匹配的行? 我需要在成吨的网络日志中搜索对IOC的所有点击(IP/URL),这比预期的要困难。 编辑:我应该提到这是“Ubuntu 16.04.5 LTS\n\l”,在Windows 10下作为WSL

您的grep命令工作:

grep -f input_file.txt -r .
应按预期工作,并匹配input_file.txt中的所有字符串,这些字符串由
/
下所有文件中的新行分隔。在这种情况下,我怀疑在Windows下创建了具有Windows结束行的文件。您可以尝试以下操作,以确保具有正确的UNIX端点:

find ./ -type f -print0 | xargs -0 dos2unix
然后重试。

您的grep命令:

grep -f input_file.txt -r .
应按预期工作,并匹配input_file.txt中的所有字符串,这些字符串由
/
下所有文件中的新行分隔。在这种情况下,我怀疑在Windows下创建了具有Windows结束行的文件。您可以尝试以下操作,以确保具有正确的UNIX端点:

find ./ -type f -print0 | xargs -0 dos2unix

再试一次。请不要杀我。也许有人会觉得这篇文章很有用

解决方案是:行编码。 因为我是在Windows上运行的,所以当WSL是Unix时,我的Sublime文本被设置为“Windows行结束符”,因此不理解这些行结束符。在编辑器中切换选项后,一切正常:

$ cat -A input_file_changed.txt
abc$
cba$
bca$
acb

$ cat -A input_file.txt
abc^M$
cba^M$
bca^M$
acb

    $ grep -f input_file_changed.txt -r .
    ./input_file.txt:abc
    ./input_file.txt:cba
    ./input_file.txt:bca
    ./input_file.txt:acb
    ./input_file_changed.txt:abc
    ./input_file_changed.txt:cba
    ./input_file_changed.txt:bca
    ./input_file_changed.txt:acb
    ./target-dir/target-file-A.txt:abc
    ./target-dir/target-file-A.txt:cba
    ./target-dir/target-file-A.txt:bca
    ./target-dir/target-file-A.txt:acb
    ./target-dir/target-file-B.txt:acb
    ./target-dir/target-file-B.txt:cba
    ./target-dir/target-file-B.txt:abc
    ./target-dir/target-file-B.txt:bca
    ./target-dir/target-subdir-A/target-file-A.txt:abc
    ./target-dir/target-subdir-A/target-file-A.txt:cba
    ./target-dir/target-subdir-A/target-file-A.txt:bca
    ./target-dir/target-subdir-A/target-file-A.txt:acb
    ./target-dir/target-subdir-A/target-file-B.txt:acb
    ./target-dir/target-subdir-A/target-file-B.txt:cba
    ./target-dir/target-subdir-A/target-file-B.txt:abc
    ./target-dir/target-subdir-A/target-file-B.txt:bca
    ./target-dir/target-subdir-B/target-file-A.txt:abc
    ./target-dir/target-subdir-B/target-file-A.txt:cba
    ./target-dir/target-subdir-B/target-file-A.txt:bca
    ./target-dir/target-subdir-B/target-file-A.txt:acb
    ./target-dir/target-subdir-B/target-file-B.txt:acb
    ./target-dir/target-subdir-B/target-file-B.txt:cba
    ./target-dir/target-subdir-B/target-file-B.txt:abc
    ./target-dir/target-subdir-B/target-file-B.txt:bca

请不要杀我。也许有人会觉得这篇文章很有用

解决方案是:行编码。 因为我是在Windows上运行的,所以当WSL是Unix时,我的Sublime文本被设置为“Windows行结束符”,因此不理解这些行结束符。在编辑器中切换选项后,一切正常:

$ cat -A input_file_changed.txt
abc$
cba$
bca$
acb

$ cat -A input_file.txt
abc^M$
cba^M$
bca^M$
acb

    $ grep -f input_file_changed.txt -r .
    ./input_file.txt:abc
    ./input_file.txt:cba
    ./input_file.txt:bca
    ./input_file.txt:acb
    ./input_file_changed.txt:abc
    ./input_file_changed.txt:cba
    ./input_file_changed.txt:bca
    ./input_file_changed.txt:acb
    ./target-dir/target-file-A.txt:abc
    ./target-dir/target-file-A.txt:cba
    ./target-dir/target-file-A.txt:bca
    ./target-dir/target-file-A.txt:acb
    ./target-dir/target-file-B.txt:acb
    ./target-dir/target-file-B.txt:cba
    ./target-dir/target-file-B.txt:abc
    ./target-dir/target-file-B.txt:bca
    ./target-dir/target-subdir-A/target-file-A.txt:abc
    ./target-dir/target-subdir-A/target-file-A.txt:cba
    ./target-dir/target-subdir-A/target-file-A.txt:bca
    ./target-dir/target-subdir-A/target-file-A.txt:acb
    ./target-dir/target-subdir-A/target-file-B.txt:acb
    ./target-dir/target-subdir-A/target-file-B.txt:cba
    ./target-dir/target-subdir-A/target-file-B.txt:abc
    ./target-dir/target-subdir-A/target-file-B.txt:bca
    ./target-dir/target-subdir-B/target-file-A.txt:abc
    ./target-dir/target-subdir-B/target-file-A.txt:cba
    ./target-dir/target-subdir-B/target-file-A.txt:bca
    ./target-dir/target-subdir-B/target-file-A.txt:acb
    ./target-dir/target-subdir-B/target-file-B.txt:acb
    ./target-dir/target-subdir-B/target-file-B.txt:cba
    ./target-dir/target-subdir-B/target-file-B.txt:abc
    ./target-dir/target-subdir-B/target-file-B.txt:bca

谢谢,事实就是这样。我只是得出了同样的结论:)谢谢——事实就是这样。我只是得出了同样的结论:)