Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Пните новичка  (Прочитано 416 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн qder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Пните новичка
« : 29 Ноябрь 2011, 01:27:28 »
Пните новичка в нужную сторону, пожалуйста.
Ситуация: Пишу скриптик по учету трафика, попалось затруднение.
Есть строчка (в переменной) примерно такого вида:
     RX bytes:2973588991 (2.9 GB)  TX bytes: 3045749548(3.0 GB)
Средствами командной строки надо взять в другую переменную цифру 3045749548
Сейчас у меня все замерло на этапе:
txbytes='     RX bytes:2973588991 (2.9 GB)  TX bytes: 3045749548(3.0 GB)';
#На самом деле оно grep-ится из ifconfig и прочее, но сейчас для нашей ситуации сделаю так.
if [[ $txbytes =~ ([0-9]+?) ]]; then
  n=${BASH_REMATCH[*]}; 
fi;

На данном этапе n получается равным 3. Но сами попадания типа ${BASH_REMATCH[1]} или ${BASH_REMATCH[2]} пустые!
Что я делаю не так?
Можно ли как-то по-другому выделить это число (например, используя какой-нибудь awk или sed)?
ОСь - последняя версия Ubuntu Server, если это важно

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Пните новичка
« Ответ #1 : 29 Ноябрь 2011, 01:47:47 »
txbytes='     RX bytes:2973588991 (2.9 GB)  TX bytes: 3045749548(3.0 GB)';
Можно ли как-то по-другому выделить это число (например, используя какой-нибудь awk или sed)?

$ echo "$txbytes" | sed 's/.*TX bytes: \(.*\)(.*/\1/g'
3045749548

$ echo "$txbytes" | awk -F'[[:space:]]|[[:punct:]]' '{print $18}'
3045749548

Только следует принять во внимание факт, что вывод ifconfig зависит от дистрибутива вообще и версии самого ifconfig в частности, поэтому если предполагается некоторая кроссплатформенность, то придётся модифицировать регэксп или использовать иные средства.
« Последнее редактирование: 29 Ноябрь 2011, 02:00:56 от arcfi »

Оффлайн qder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Пните новичка
« Ответ #2 : 29 Ноябрь 2011, 02:02:31 »
Уважаемый arcfi, искренне большое вам спасибо!
Кто ж знал, что скобки, оказывается надо эскейпить(((
Еще раз спасибо!

Пользователь решил продолжить мысль 29 Ноябрь 2011, 02:06:58:
Никакая кросплатформенность не предполагается. Этот скрипт будет крутится только на одном сервере. При обновлении поменять регэксп я теперь смогу, ибо понимаю, где порылась собака.
*смайлик, изображающий благодарность*
« Последнее редактирование: 29 Ноябрь 2011, 02:06:58 от qder »

 

Страница сгенерирована за 0.075 секунд. Запросов: 27.