Автор Тема: Помогите с регулярными выражениями [решено]  (Прочитано 2136 раз)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Надо распарсить строку вывода blkid.

Не получается в частности получить значение LABEL

Пример:
строка
/dev/sdc1: LABEL="LUX" UUID="7914-15F7" TYPE="vfat"

Надо  в скрипте получить:

dev=/dev/sdc1
label=LUX
type=vfat
uuiid=7914-15F7

Пишу
$dev=/dev/sdc1;  label=$(blkid  $DEV | grep -o LABEL=\".*\") ; echo $LABEL

« Последнее редактирование: 29.06.2015 21:14:41 от ruslandh »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
А что буквы разные $dev= и $DEV, например. Но надо не grep, а sed видимо ?
blkid /dev/sda5 | sed "s|.*UUID=\"\([^\"]*\)\" .*|\1|"UUID за образец, так как LABEL нет у меня.
« Последнее редактирование: 29.06.2015 18:22:11 от asy »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
dev=`blkid | cut -d " " -f1 | rev | сut -c 2- | rev`
label=`blkid | cut -d " " -f2 `| cut -c 8 | rev | cut -c 2 | rev`
type=`blkid | cut -d " " -f4` | cut -c 7 | rev | cut -c 2 | rev`
uuid=`blkid | cut -d " " -f3` | cut -c 7 | rev | cut -c 2 | rev`

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Спасибо, ешё-бы понять, что какой знак значит, а то мне как раз её очень понятно :-(
В частности вертикальная черта после s

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
cut не пойдут в blkid порядок значений может меняться

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Ещё раз спасибо, отработали.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Ещё одна засада. Если LABEL нет - мусор лезет. Похоже grep всё-же нужен

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
blkid -o exportи дальше grep по вкусу.
С --help полезно иногда запускать. ;)
Андрей Черепанов (cas@)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
Вот простой способ получить значение заданного поля указанного устройства.
blkid -o value -s LABEL /dev/loop0
« Последнее редактирование: 29.06.2015 19:07:31 от Skull »
Андрей Черепанов (cas@)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
У меня под рукой другой Linux там хелп хуже :)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Но работает ;-) спасибо

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
Не за что. А кто будет "решено" а тему добавлять? ;)
Андрей Черепанов (cas@)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
В частности вертикальная черта после s
В данном случае это разделитель.
http://rus-linux.net/lib.php?name=MyLDP/consol/HuMan/sed-ru.html
Ctrl+F -> разделитель.
Там рядом поглядеть.
Сноси Винду, переходи на Линукс ! :)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Не за что. А кто будет "решено" а тему добавлять? ;)
Вот только пойму "по косточкам выражение" sed :)
C blkid мне просто повезло :)

Может и другой встретится, когда надо разобрать строчки типа value="значение", хотелось-бы понять как это делается.

Впрочем посталю "решено" - для многих это будет достаточно.
« Последнее редактирование: 29.06.2015 23:03:21 от ruslandh »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Вот только пойму "по косточкам выражение" sed :)
sed "s|.*UUID=\"\([^\"]*\)\" .*|\1|"
Это вот без экранирующих бакслэшей:
sed "s|.*UUID="([^"]*)" .*|\1|"
s|что ищем|на что меняем|
В скобках - паттерн, который попадает в переменную "\1", которая стоит в разделе "на что меняем". [^"] - любой символ, кроме ".