Я пишу сценарий для поиска пинга с определенного иностранного IP-адреса, но у меня возникают проблемы с пониманием того, как отформатировать мою команду "grep" .. Внутри моего текстового файла находится вывод команды "netstat anp". В Windows я смог добиться этого с помощью следующей команды:

grep -oP (\d{1,3}\.){1,3}\d{1,3} inc.txt  

Вывод в текстовом файле отформатирован так:

Active Internet connections (w/o servers)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State        
tcp        0      1 172.18.24.12:51699      72.21.91.17:https       FIN_WAIT1    
tcp        0      1 172.18.24.12:55154      71.19.176.223:https     FIN_WAIT1  
tcp        0      1 172.18.24.12:59926      173.194.46.89:http      FIN_WAIT1  

(Я планирую отфильтровать локальный адрес). Но я не могу понять, как мне следует форматировать эту команду для моего скрипта bash. Я не думаю, что кто-то здесь может помочь мне с этим? Помощь всегда ценится.

2 ответа2

0

Просто цитирование регулярного выражения, кажется, работает для меня:

grep -oP '(\d{1,3}\.){1,3}\d{1,3}' inc.txt

Редактировать

Или, как сказал Скотт, немного более конкретный '(\d{1,3}\.){3}\d{1,3}' если вы хотите, чтобы это было ровно 4 октета, не больше, не меньше.

0

Метод последовательного обнаружения, который работает из скрипта или из оболочки, таков:

Например, предположим, что мы ищем 72.21.95.46

grep ' 72\.' netstat.txt will give you all the ip addresses that start with 72.

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

из оболочки вы можете использовать "повторить предыдущую команду с bang bang":

!! | grep 21\.

из сценария

grep ' 72\.' | grep 21\. 

и так далее.

Чтобы получить его одним выстрелом, просто скажите

grep 72.21.95.46 netstat.txt

точки расширятся до любого символа

если вы летите на космическом корабле, используйте:

grep '72\.21\.95\.46' netstat.txt

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