从文本文件中查找和删除行(linux)

从文本文件中查找和删除行(linux)

我有一个文本文件,其中列出了所有最近连接的地址。我运行了以下命令:

netstat -natu | grep 'ESTABLISHED' > temp.txt 

然后我继续过滤文件中除 IP 之外的所有内容:

grep -oP '(\d{1,3}\.){1,3}\d{1,3}' temp.txt > IPs.txt  

现在我想知道是否有办法在这个文本文件中找到一个特定的 IP,并且(如果可能)完全删除该行。基本上过滤掉本地主机地址(127.0.0.0),这样我只剩下外部地址。但我不确定我是否理解我应该如何做。

在此过程中,在某个地方过滤掉本地 IP 会更容易吗,或者只是将它们从生成的文本文件中过滤掉?

如果有人有任何想法,我很乐意听听。我对 grep 不太熟悉,但我正在慢慢学习……提前谢谢您。

答案1

外部地址已位于 netstat 输出的不同列中。grep -o使用 awk 只打印外部 IP,而不是同时打印本地 IP 和外部 IP:

netstat -natu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 > IPs.txt

这也为您提供了从 netstat 中删除的选项,-n以便您可以看到名称而不是 IP。

如果你想删除重复项,请将整个内容传输到sort -u


编辑:
为了回答标题中提出的实际问题,您可以使用以下命令删除文件中所有包含环回 IP 的行:

sed -i '/^127.0.0.1$/ d' temp.txt

相关内容