Нужно "grep" несколько выходных

Используя эту команду (upower -i /org/freedesktop/UPower/devices/battery_BAT1) мой терминал показывает следующий вывод:

  native-path:          BAT1
  vendor:               LG
  power supply:         yes
  updated:              mar 31 may 2016 12:45:15 CEST (101 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               fully-charged
    warning-level:       none
    energy:              50,4088 Wh
    energy-empty:        0 Wh
    energy-full:         51,4522 Wh
    energy-full-design:  48,1 Wh
    energy-rate:         6,29 W
    voltage:             8,313 V
    percentage:          97%
    capacity:            100%
    icon-name:          'battery-full-charged-symbolic'

Мне нужно получить массив с данными вывода. Что-то вроде этого: [BAT1, LG, yes, [...], 100%, 'battery-full-charged-symbolic']

Есть ли способ сделать это?

2 ответа

Вы можете попробовать что-то вроде:

 var = ( $(upowerOutput | grep -oE ':.+$' | sed -e 's/^[ \t:]*//') )

grep часть выбирает обязательные поля и sed используется для обрезки ведущих мест и :,

Ваш вывод - это типичный текст на основе столбцов. (разделитель :). Вы можете использовать awk для форматирования в желаемый формат.

upower cmd...|awk -F':\\s*' '{printf "%s%s",(NR==1?"[":", "), $2}END{print "]"}'

Дам тебе:

[BAT1, LG, yes, mar 31 may 2016 12, yes, yes, , yes, yes, fully-charged, none, 50,4088 Wh, 0 Wh, 51,4522 Wh, 48,1 Wh, 6,29 W, 8,313 V, 97%, 100%, 'battery-full-charged-symbolic']
Другие вопросы по тегам