Re: Почему sed выдает не только группу но и другой текст ?
26.12.2013, 17:35, "Alexander Galanin" : > On Thu, 26 Dec 2013 16:42:16 +0400 > Vladimir Skubriev wrote: > >> 1. Зачем \< и \> в grep'е почему не просто 'inet' ? или Вы просто только >> --extended-regexp пользуетесь ? > > Потому что «просто inet» пропустит inet6, что нас мало интересует. > Можно и пробел после слова поставить. элегантнее сразу запросить у /bin/ip только inet4-адерса. и вместо "ip a ..." написать "ip -4 a ..." -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/135541388069...@web14h.yandex.ru
Re: Почему sed выдает не только группу но и другой текст ?
26.12.2013 17:26, Alexander Galanin пишет: On Thu, 26 Dec 2013 16:42:16 +0400 Vladimir Skubriev wrote: 1. Зачем \< и \> в grep'е почему не просто 'inet' ? или Вы просто только --extended-regexp пользуетесь ? Потому что «просто inet» пропустит inet6, что нас мало интересует. Можно и пробел после слова поставить. 2. Я не знал, что можно .*inet без группы написать, точнее что не обязательно все в группы объединять. В группу объединяют, если хотят что-то с ней потом делать. 3. ( - группа начинается, [^ /]* - любое количество чего ? Любых символов, кроме пробела и слеша. Это на случай адресов вида 192.168.1.22/24, которые будут в ethernet-сети. Чем плох мой вариант (после вашего примера) ip a show dev ppp50 | grep 'inet' | sed -r 's/.*inet (.*) peer.*/\1/' Сломается на «inet 192.168.1.22/24 brd 192.168.1.255 scope global eth1». Но это уже немного другой случай, так что если интересует только ppp, то всё нормально. Но как сказали выше, красивее будет sed с ключом -n. Спасибо. Добавлю без слэша и пробела! А то вдруг завтра пров решит перейти на ethernet. -- -- Faithfully yours, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/52bc316d.2090...@skubriev.ru
Re: Почему sed выдает не только группу но и другой текст ?
On Thu, 26 Dec 2013 16:42:16 +0400 Vladimir Skubriev wrote: > 1. Зачем \< и \> в grep'е почему не просто 'inet' ? или Вы просто только > --extended-regexp пользуетесь ? Потому что «просто inet» пропустит inet6, что нас мало интересует. Можно и пробел после слова поставить. > 2. Я не знал, что можно .*inet без группы написать, точнее что не > обязательно все в группы объединять. В группу объединяют, если хотят что-то с ней потом делать. > 3. ( - группа начинается, [^ /]* - любое количество чего ? Любых символов, кроме пробела и слеша. Это на случай адресов вида 192.168.1.22/24, которые будут в ethernet-сети. > Чем плох мой вариант (после вашего примера) > > ip a show dev ppp50 | grep 'inet' | sed -r 's/.*inet (.*) peer.*/\1/' Сломается на «inet 192.168.1.22/24 brd 192.168.1.255 scope global eth1». Но это уже немного другой случай, так что если интересует только ppp, то всё нормально. Но как сказали выше, красивее будет sed с ключом -n. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131226172606.d19a081716a87d0ad646e...@galanin.nnov.ru
Re: Почему sed выдает не только группу но и другой текст ?
On Thu, Dec 26, 2013 at 04:43:27PM +0400, Vladimir Skubriev wrote: > 26.12.2013 16:38, yuri.nefe...@gmail.com пишет: > > В первой строке искомый образец не находится и sed пропускает > > ее целиком. Во второй строке срабатывает замена. > >Ю. > Ух ты её маё. А слона то я и не заметил. > А все потому, что deadline приближается ( К хорошим программистам на Новый Год приходит Дед Мороз, а к плохим -- Дедлайн... (c) -- Eugene Berdnikov -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131226125755.ge3...@sie.protva.ru
Re: Почему sed выдает не только группу но и другой текст ?
26.12.2013 16:38, yuri.nefe...@gmail.com пишет: On Thu, 26 Dec 2013, Vladimir Skubriev wrote: Помогите с sed. Пожалуйста. #ip a | grep ppp50 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 Здесь у вас _две_ строки в каждой ppp50 #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 84.51.23.2 В первой строке искомый образец не находится и sed пропускает ее целиком. Во второй строке срабатывает замена. Ю. Ух ты её маё. А слона то я и не заметил. А все потому, что deadline приближается ( -- -- Faithfully yours, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/52bc246f.9070...@skubriev.ru
Re: Почему sed выдает не только группу но и другой текст ?
26.12.2013 16:10, Alexander Galanin пишет: On Thu, 26 Dec 2013 15:39:56 +0400 Vladimir Skubriev wrote: Помогите с sed. Пожалуйста. #ip a | grep ppp50 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 Во-первых, ip a show dev ppp50, чтобы обойтись без грепа. Во первых - спасибо! #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 84.51.23.2 Нужно получить ip адрес по интерфейсу. Во-вторых, указать более точный regexp. Хватит условия "строка без пробелов и слешей": [^ /]*, т.е. в итоге получится: ip a show dev ppp50 | grep -E '\' | sed -r 's/.*inet ([^ /]*).*/\1/' Во вторых вопросы :-) : 1. Зачем \< и \> в grep'е почему не просто 'inet' ? или Вы просто только --extended-regexp пользуетесь ? 2. Я не знал, что можно .*inet без группы написать, точнее что не обязательно все в группы объединять. 3. ( - группа начинается, [^ /]* - любое количество чего ? Чем плох мой вариант (после вашего примера) ip a show dev ppp50 | grep 'inet' | sed -r 's/.*inet (.*) peer.*/\1/' ? Грепается строка с "inet", чтобы отфильтровать всё постороннее, в т.ч. inet6. Но надо не забыть обработать случай, когда на интерфейсе несколько адресов. Меня вполне устарвивает вариант с одним ) -- -- Faithfully yours, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/52bc2428.7050...@skubriev.ru
Re: Почему sed выдает не только группу но и другой текст ?
On Thu, 26 Dec 2013 15:16:47 +0300 Alexandr Terekhov wrote: > Тогда уж > ip a show dev br0 | sed -rn 's/.*inet ([^ /]*).*/\1/p' Да, так лучше. Только без копии в «личку», пожалуйста. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131226163945.ca6e83ac0ceeea6dea079...@galanin.nnov.ru
Re: Почему sed выдает не только группу но и другой текст ?
On Thu, 26 Dec 2013, Vladimir Skubriev wrote: Помогите с sed. Пожалуйста. #ip a | grep ppp50 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 Здесь у вас _две_ строки в каждой ppp50 #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 84.51.23.2 В первой строке искомый образец не находится и sed пропускает ее целиком. Во второй строке срабатывает замена. Ю.
Re: Почему sed выдает не только группу но и другой текст ?
On 12/26/13, Vladimir Skubriev wrote: > Помогите с sed. Пожалуйста. Всё он делает правильно. Вставьте grep перед sed, либо пользуйтесь awk/perl/etc
Re: Почему sed выдает не только группу но и другой текст ?
Тогда уж ip a show dev br0 | sed -rn 's/.*inet ([^ /]*).*/\1/p' 2013/12/26 Alexander Galanin > On Thu, 26 Dec 2013 15:39:56 +0400 > Vladimir Skubriev wrote: > > > Помогите с sed. Пожалуйста. > > > > #ip a | grep ppp50 > > 6: ppp50: mtu 1492 qdisc > > pfifo_fast state UNKNOWN qlen 3 > > inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 > > Во-первых, ip a show dev ppp50, чтобы обойтись без грепа. > > > #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' > > 6: ppp50: mtu 1492 qdisc > > pfifo_fast state UNKNOWN qlen 3 > > 84.51.23.2 > > > > Нужно получить ip адрес по интерфейсу. > > Во-вторых, указать более точный regexp. Хватит условия "строка без > пробелов и слешей": [^ /]*, т.е. в итоге получится: > > ip a show dev ppp50 | grep -E '\' | sed -r 's/.*inet ([^ /]*).*/\1/' > > Грепается строка с "inet", чтобы отфильтровать всё постороннее, в т.ч. > inet6. > > Но надо не забыть обработать случай, когда на интерфейсе несколько адресов. > > -- > Alexander Galanin > > > -- > To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact > listmas...@lists.debian.org > Archive: > http://lists.debian.org/20131226161044.9256aa493ce92a75bd741...@galanin.nnov.ru > >
Re: Почему sed выдает не только группу но и другой текст ?
On Thu, 26 Dec 2013 15:39:56 +0400 Vladimir Skubriev wrote: > Помогите с sed. Пожалуйста. > > #ip a | grep ppp50 > 6: ppp50: mtu 1492 qdisc > pfifo_fast state UNKNOWN qlen 3 > inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 Во-первых, ip a show dev ppp50, чтобы обойтись без грепа. > #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' > 6: ppp50: mtu 1492 qdisc > pfifo_fast state UNKNOWN qlen 3 > 84.51.23.2 > > Нужно получить ip адрес по интерфейсу. Во-вторых, указать более точный regexp. Хватит условия "строка без пробелов и слешей": [^ /]*, т.е. в итоге получится: ip a show dev ppp50 | grep -E '\' | sed -r 's/.*inet ([^ /]*).*/\1/' Грепается строка с "inet", чтобы отфильтровать всё постороннее, в т.ч. inet6. Но надо не забыть обработать случай, когда на интерфейсе несколько адресов. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131226161044.9256aa493ce92a75bd741...@galanin.nnov.ru
Почему sed выдает не только группу но и другой текст ?
Помогите с sed. Пожалуйста. #ip a | grep ppp50 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 inet 84.51.23.2 peer 80.68.8.17/32 scope global ppp50 #ip a | grep ppp50 | sed -r 's/(.*inet )(.*)( peer.*)/\2/' 6: ppp50: mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 84.51.23.2 Нужно получить ip адрес по интерфейсу. -- Faithfully yours, CVision Lab System Administrator Vladmir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/52bc158c.4050...@cvisionlab.com