【发布时间】:2014-04-03 22:47:41
【问题描述】:
我已尝试多次尝试在多个文件中 grep ip 地址的前三个八位字节,但当第一个八位字节为一位或两位数时,它有时会捕获误报。
外壳是“SH”
(输入示例)
i = 5.79.78
$data中的for i收集了几个需要处理的IP地址。为简单起见 我只显示一个“i”值。
代码
max=5
data="$(cat $dir* | cut -d '.' -f 1-3 | awk -v max="$max" '{a[$0]++}END{for(i in a){if(a[i] > max){print i}}}' | sed 's/.*://')"
for i in $data; do
ii="${i}."
list=$(grep "$ii" $dir*)
done
echo "$list"
*输出 *
/tmp/aaa.txt:5.79.78.237
/tmp/aaa.txt:5.79.78.230
/tmp/aaa.txt:5.79.78.229
/tmp/aaa.txt:5.79.78.228
/tmp/aaa.txt:5.79.78.227
/tmp/ddd.txt:5.79.78.236
/tmp/sss.txt:95.79.78.95 False
/tmp/sss.txt:95.79.78.66 False
/tmp/sss.txt:95.79.78.48 False
/tmp/sss.txt:95.79.78.216 False
/tmp/sss.txt:95.79.78.163 False
但它会在我要查找的地址之前使用一个数字提取 IP 地址。 我试图添加一个尾随“。”但它仍然无法找到所有正确的匹配项。
尝试
list=$(grep -E "$i""\.[0-9]{1,3}" $dir*)
list=$(grep -e ^ "$ii" $dir*)
list=$(grep "\<$ii" $dir*)
list=$(grep "^$ii" $dir*)
(Also tried list="$grep "^$ii" $dir*)" (adding quotes)
【问题讨论】:
-
您可以添加输入和预期输出的示例吗?
-
它在顶部(示例)下,输出是包含前三个八位字节完全匹配的文件列表。
-
$(...)不是 "sh" 而是bash或ksh -
@jm666,POSIX shell(例如
dash)允许:pubs.opengroup.org/onlinepubs/9699919799/utilities/… -
@glennjackman hm.. 必须阅读一下 - 我知道 old school “sh” 什么只知道反引号 :)