URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9736
[ Назад ]

Исходное сообщение
"обрезать строку вывода"

Отправлено laronov , 03-Сен-13 12:00 
Доброе время суток!
Пытаюсь в FreeBSD вычленить номер jail (JID) по конкретному IP

Команда jls возвращает:
   JID  IP Address      Hostname                      Path
     2  192.168.1.4     proto.nas.bocmannet           /jail/proto

если я пишу # jls | grep "192.168.1.4"
то получаю:
     2  192.168.1.4     proto.nas.bocmannet           /jail/proto

а вот как получить именно цифру "2" и подставить ее потом в вызов другой команды как значение параметра я никак не могу понять.

Был бы благодарен за помощь!


Содержание

Сообщения в этом обсуждении
"обрезать строку вывода"
Отправлено михалыч , 03-Сен-13 12:22 
jls | grep "192.168.1.4" | awk '{print $1}'

"обрезать строку вывода"
Отправлено Andrey Mitrofanov , 03-Сен-13 16:31 
> jls | grep "192.168.1.4" | awk '{print $1}'

Оно, конечно, работает, но useless use of cat^W grep никто не отменял:

> grep "192.168.1.4" | awk '{print $1}' 

| awk '$2=="192.168.1.4"{print $1}'

зыж И, кстати, а Вас 192.168.194.255, например, пролезает.


"обрезать строку вывода"
Отправлено laronov , 03-Сен-13 16:57 
>> jls | grep "192.168.1.4" | awk '{print $1}'
> Оно, конечно, работает, но useless use of cat^W grep никто не отменял:
>
> grep "192.168.1.4" | awk '{print $1}' 
> | awk '$2=="192.168.1.4"{print $1}'

> зыж И, кстати, а Вас 192.168.194.255, например, пролезает.

Про 192.168.194.255 я что-то не понял...
не поясните?


"обрезать строку вывода"
Отправлено Andrey Mitrofanov , 03-Сен-13 19:04 
>> зыж И, кстати, а Вас 192.168.194.255, например, пролезает.
> Про 192.168.194.255 я что-то не понял...
> не поясните?

| grep "192.168.1.4"

пропустит как строку

   2  192.168.1.4     proto.nas.bocmannet           /jail/proto

, так и

999  192.168.194.255 meta.щas.bocmannet            /jail/moto


"обрезать строку вывода"
Отправлено михалыч , 03-Сен-13 19:40 
>>> jls | grep "192.168.1.4" | awk '{print $1}'
>> Оно, конечно, работает, но useless use of cat^W grep никто не отменял:
>>
> grep "192.168.1.4" | awk '{print $1}' 
>> | awk '$2=="192.168.1.4"{print $1}'

>> зыж И, кстати, а Вас 192.168.194.255, например, пролезает.
> Про 192.168.194.255 я что-то не понял...
> не поясните?

Да, абсолютно справедливое замечание.

Для вашего случая, лучше так:
jls | grep "192.168.1.4" | awk '$2=="192.168.1.4"{print $1}'


"обрезать строку вывода"
Отправлено laronov , 04-Сен-13 09:55 
Большое спасибо за ответы и помощь!


"обрезать строку вывода"
Отправлено Аноним , 04-Сен-13 18:57 
> Для вашего случая, лучше так:
> jls | grep "192.168.1.4" | awk '$2=="192.168.1.4"{print $1}'

михалыч ну ты чего? :) Тут grep вообще не нужен ...


"обрезать строку вывода"
Отправлено Andrey Mitrofanov , 04-Сен-13 22:38 
Может, он констатировал смерть? "Для вашего случая даже useless grep уже не страшен."

"обрезать строку вывода"
Отправлено михалыч , 05-Сен-13 13:38 
> михалыч ну ты чего? :) Тут grep вообще не нужен ...

А я что? Я ни чего! ))
Это же товарисч с grep'ом начал, ну я и помог!

> Может, он констатировал смерть? "Для вашего случая даже useless grep уже не страшен."

Ну ладно, ладно! Уговорили!
Конфуз, однако, вышел.

О! Помощь утопающим - дело рук самих утопающих!
Я нашёл волшебный ключик у grep -F , вот! (типа извернулся)
(к сожалению, ключ -P не поддерживается во FreeBSD, а то можно было бы с ним одним махом попробовать)

И тогда использование grep оправдано (частично), ничего другое не пролезет(?)
| grep -F "192.168.1.4" | awk '{print $1}'

или дуплетом, с обеих стволов сразу, чтобы уж наверняка добить ))
| grep -F "192.168.1.4" | awk '$2=="192.168.1.4"{print $1}'

А щас, напоследок, шмальну-ка я из perl'а, партизаны не сдаются!
| perl -ne 'if (/192\.168\.1\.4/){s/\s*?(\d+)\s+?.*/$1/;print}'


"обрезать строку вывода"
Отправлено Аноним , 03-Сен-13 12:25 
Неужто Гугл начал пожизненно банить ?

http://www.google.ru/#newwindow=1&q=shell+split+string


"обрезать строку вывода"
Отправлено laronov , 03-Сен-13 13:36 
Спасибо большое!
вот это отлично подошло jls | grep "192.168.1.4" | awk '{print $1}'

а с гуглом ступил и искал только по русски:(