我有一个名为dictionary.txt
的词典文件。
它包含以下示例IP地址:
1.1.1.1
2.2.2.2
3.3.3.3
此目录中有许多IP_files.iplists
,每个IP LIST包含许多不同的IP地址
我想搜索:1.1.1.1
并且如果在其中一个IP LISTS中找到此字符串,则将所有找到的IP LIST文件名(例如IP_files_list1.iplists
)输出到另一个以其命名的文件字典搜索词(例如1.1.1.1.txt
)
理想情况下,1.1.1.1.txt
包含找到的所有文件名列表,2.2.2.2.txt
将包含找到的所有IP LIST文件名列表。
grep -r "1.1.1.1" > 1.1.1.1
就我而言。这将创建一个名为1.1.1.1的文件,并列出" 1.1.1.1"的所有IPLISTS.iplists文件名。发现于。
所以1.1.1.1看起来像这样:
IP_files_list1.iplists
IP_files_list2.iplists
IP_files_list_another_list.iplists
答案 0 :(得分:3)
使用read
来阅读dictionary.txt
:
#!/bin/bash
cd /path/to/iplists
while IFS= read -r ip; do
# get the list of files that contain this ip and save it in a file
grep -Frlw "$ip" * > "$ip".txt
done < /path/to/dictionary.txt
-F
将$ip
视为字符串,而非模式-r
选项,用于递归搜索/ path / to / plists下的所有文件-l
只是获取包含匹配项的文件名,而不是匹配的内容-w
查找整个ip(以便1.1.1.1
不匹配11.1.1.1
答案 1 :(得分:-1)
像这样的衬里可以工作
ip='1\.1\.1\.1'; for f in $(find . -type f); do if cat $f | grep -q "$ip"; then echo $f; fi ; done >> $ip.txt
你也可以用另一个循环包围它:
for ip in '1.1.1.1' '2.2.2.2'; do for f in $(find . -type f); do if cat $f | grep -q "$ip"; then echo $f; fi ; done >> $ip.txt; done
或使用你的dictionary.txt
for ip in $(cat dictionary.txt); do for f in $(find . -type f); do if cat $f | grep -q "$ip"; then echo $f; fi ; done >> $ip.txt; done