У меня есть текстовый файл со списком адресов из всех последних подключений. Я выполнил следующую команду:

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 ответ1

0

Внешние адреса уже находятся в другом столбце в выводе netstat. Вместо grep -o который печатает как локальные, так и внешние IP-адреса, используйте awk для печати только внешних IP-адресов:

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

Это также дает вам возможность удалить -n из netstat, чтобы вы могли видеть имена вместо IP-адресов.

И если вы хотите удалить дубликаты, отправьте все это на sort -u


Редактировать:
И чтобы ответить на фактический вопрос, заданный в заголовке, вы можете удалить все строки в файле, которые содержат в точности IP обратной связи, с помощью следующей команды:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .