Может кто-нибудь объяснить, что делает эта команда grep / cut / awk

Это внутри файла сценария .sh:

cd /somefolder  
IP=$(ifconfig | grep 'inet addr:'| grep 168 | grep 192|cut -d: -f2 | awk '{print $1}')

В папке / somefolder есть другой список папок с одним текстовым файлом.

Может кто-нибудь объяснить, что делает вышеприведенная команда, она комбинирует bash с grep и awk.

Кроме того, чтобы отладить это и лучше понять это, могу ли я запустить это и в командной строке?

0
задан 16 June 2014 в 23:24

1 ответ

ifconfig листы Вы с блоком текста как это:

eth0      Link encap:Ethernet  HWaddr aa:aa:aa:aa:aa:aa  
          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::6ef0:49ff:fe54:b80/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:118583044 errors:0 dropped:0 overruns:0 frame:0
          TX packets:117593447 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:86729976752 (86.7 GB)  TX bytes:96008613785 (96.0 GB)

первое grep фильтры для строк, которые содержат inet addr:, оставляя Вас с:

          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0

следующее два grep команды фильтруют снова, ища 192 и 168. Я думаю, что это ищет локального дюйм/с. Которые имеют тенденцию быть похожими 192.168.*.*. Не весь локальный дюйм/с похож на это, но я проигнорирую это на данный момент.

В случае нашего примера, ничто иное не отфильтровано.

сокращение тогда использует : в качестве разделителя (сокращающий точку) и принимает второе значение:

192.168.0.4  Bcast

awk разграничивает пространством по умолчанию, и оно печатает первый столбец, оставляя нас с:

192.168.0.4

Это - сценарий, который пытается получить Ваш локальный IP. Это не очень хорошо. Если Вы, LAN использует различный формат обращения или у Вас есть легальный (внешний) IP с 192 или 168 в ней или его маске — как 4.4.168.192—, это неправильно поймало бы ее.

существуют, вероятно, лучшие способы получить Ваш внутренний IP, чем фильтрация ifconfig вывод, но вот другой метод фильтрации, который только использует один awk для чистки:

ifconfig | awk -F' |:' '/inet addr:192\.168\./ {print $13}'

Это будет только работать на 192,168. . адреса, но это уже лучше, чем существующая команда.

4
ответ дан 16 June 2014 в 23:24

Другие вопросы по тегам:

Похожие вопросы: