我有一个格式为1000个IP地址的文件,在4个八位字节是我需要过滤的源端口之后。我对bash脚本有点新,所以努力grep过滤端口号的IP地址。有关如何使用sed
或awk
过滤端口号的任何建议都将非常感激。
192.168.100.1.111 192.168.200.10.111 192.168.200.128.501 192.168.150.5.300
输出所需
192.168.100.1
答案 0 :(得分:0)
您可以使用以下命令执行此操作: -
sed 's/\.[^.]*$//' your_ip_address.txt > filtered_ip_address.txt
它将删除最后一个点以及后面的字符串。
例如: -
echo 192.168.100.1.111 | sed 's/\.[^.]*$//'
将输出: -
192.168.100.1
答案 1 :(得分:0)
太容易了。
awk -F'.' '{print $1"."$2"."$3"."$4}' < /tmp/ipaddresses.txt
答案 2 :(得分:0)
awk
示例:
your_port=111
awk -F\. -v port=$your_port '$NF==port{$NF="";sub(/.$/, "");print}' OFS='.' file
如果您只想删除端口:
sed 's/\.[^\.]*$//' your_file
或awk
:
awk -F\. '{$NF="";sub(/.$/, "")}1' OFS='.' your_file
为避免只有一个过程重复:
awk -F\. '{$NF="";sub(/.$/, "")}!a[$0]++' OFS='.' your_file
答案 3 :(得分:0)
请记住,调用awk
或sed
正在调用新程序,而Bash已在运行。相反,您可以直接在Bash中过滤输入:
$ while read url; do echo ${url%.*}; done <<EOL
129.168.100.1.111
1291.168.200.10.111
EOL
129.168.100.1
1291.168.200.10
那是
while read url
do
echo ${url%.*}
done < urls.txt
<强>参考强>
参数展开(请参阅man bash
){url%.*}
使用变量$url
并剥离(%
)与模式匹配的所有内容{{ 1}}。请注意,模式匹配与正则表达式不同。特别是模式匹配具有更简单的语法。即.*
匹配文字字符.
,.
匹配任何字符串。模式匹配最常见于文件名模式,如*
等
${parameter%word} ${parameter%%word} Remove matching suffix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``%'' case) or the longest matching pattern (the ``%%'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each posi- tional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.