120 , 3 <IP address> <port>
100 , 3 xx.xxx.xx.xxx xxxx
220 , 3 xxx.xx.xxx.xxx xxxx
280 3 xx.xxx.xx.xxx xx
大家好,我正在编写一个 shell 脚本,并尝试 grep/awk/sed 一些 IP 地址。清理输出很棘手。请注意,底线没有 ,
。我试图做一些事情,比如$ awk '{print $4, $5}'
过滤掉 IP 和端口列,但这对底线不起作用。
感觉我的方法不对。我怎样才能过滤掉 IP 和端口号?
答案1
由于列是不变的,因此您可以cut -c32-
(man cut
)该文件。
答案2
与 Linux 中一样,完成工作的方法不止一种。我已将您提供的文本放入 中file.txt
。根据您提供的信息,以下是两种可能的方法:
1. awk 解决方案:使用 awk 的 NF 变量从最后一个字段开始
linux-okrz:~# awk '{print $(NF-1), $(NF)}' file.txt
address> <port>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx
2. sed 解决方案:使用 sed 预先删除逗号
linux-okrz:~# sed 's|,||g' file.txt | awk '{print $3, $4}'
<IP address>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx
请注意,在这两个示例中,第一行略有偏差,因为“IP”和“address”之间有一个空格。假设实际输出中它是一个实际的 IP 地址,这应该不会有问题。此外,如果输出中还有其他实例需要重要的逗号,则第二个示例可能无法正常工作。
最后,这些命令完全基于提供的输出和问题。可能需要进一步调整,具体取决于文件中的其他内容和/或您在脚本中执行的其他操作。
答案3
使用 grep:
grep -Po '(\d+\.){3}\d+\s+\d+'