Shell 或 Bash 脚本:从文本文件中输入字符串行并在目录中递归搜索

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

我有一个巨大的文本文件,每行包含字符串(正确编辑,没有空行或前导或尾随空格)示例输入文件

WeatherNation.us
AccuWeatherNOW.us
FashionTVUHD.fr
some upper case and lower case letters but without any blank.<country-tld>
so on

我想在具有大量目录和 xml 文件的目录中搜索包含这些单词(一个接一个)的文件...单个搜索的工作命令是

grep -irwn "WeatherNation.us" /home/user/folder/
它显示带有路径和行号的文件。

搜索必须在 /home/user/folder/ 下执行,其中有许多文件夹,例如 ..fold1、fold2、fold3 等,每个文件夹都有许多文件,例如 ..1.xml 2.xml 3.xml 等。

grep -irwn "WeatherNation.us" /home/user/folder/
可以返回许多文件的输出。 Fold3 内的 2.xml 和 Fold2 内的 5.xml 中的示例条目也有一些搜索仅返回 1 个条目,或者在找不到字符串的情况下返回任何内容。

我尝试制作如下脚本来自动执行所有搜索

#!/bin/bash
 file="in.txt"
 while read -r line; do
      grep -irwn "$line" /home/user/folder/ >> out.txt
 done <$file

将每次搜索的结果存储在 out.txt 文件中...但脚本无法正常工作且 out.txt 文件为空。尝试了很多其他选择

grep -irwn ""$line"" /home/user/folder

我使用 $line 因为上面脚本中 while do 循环内的

echo "$line"
正确显示每行的所有输入,但我不知道如何将其传递给 grep 命令。 我对所有其他实用解决方案持开放态度,使用
awk sed
等。

shell search grep
1个回答
0
投票

输入文件有 dos 行结尾。使用所有可能的输入测试的正确代码与我最初使用

$line
而不是
"$line"
尝试的代码相同。

grep -irwnF -f in.txt /home/user/folder > out.txt

也可以工作,但会跳过其他文件中匹配的一些输出。

© www.soinside.com 2019 - 2024. All rights reserved.