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

Оффлайн ruslandh

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

Из help:
Цитировать

  -o, --only-matching       показывать только часть строки, совпадающей с ШАБЛОНОМ
.....
  -E, --extended-regexp     ШАБЛОН - расширенное регулярное выражение (ERE)
  -F, --fixed-regexp        ШАБЛОН - строки фиксированной длины, разделённые
                            символом новой строки
  -G, --basic-regexp        ШАБЛОН - простое регулярное выражение (BRE)
  -P, --perl-regexp         ШАБЛОН - регулярное выражения языка Perl
  -e, --regexp=ШАБЛОН       использовать ШАБЛОН для поиска




Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
В общем с grep -o я смог добиться только:
# blkid /dev/sda1  | grep -o '\bUUID=\"[^[:space:]]*'
UUID="8EBE1F81BE1F60CF"

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
В общем с grep -o я смог добиться только:
# blkid /dev/sda1  | grep -o '\bUUID=\"[^[:space:]]*'
UUID="8EBE1F81BE1F60CF"
Используй лучше sed -n.
Андрей Черепанов (cas@)

Оффлайн ruslandh

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

echo "abc cde " | sed -n
Использование: sed [ОПЦИЯ]... {только-скрипт-если-нет-другого-скрипта} [входной-файл]...

Оффлайн ruslandh

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

Цитировать
        -n
       --quiet
       --silent
              По  умолчанию,  sed  после  прохождения  каждого  цикла сценария
              распечатывает  обрабатываемую   область   шаблона.   Эти   опции
              отключают  автоматический вывод, который может быть включен лишь
              явным указанием ключа p для sed.

И как он мне поможет?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
В теле убрать ненужное, а после последнего разделителя поставить p – он будет работать как grep:

sed -n 's/^.*\(ЧТО\).*$/\1/p'
« Последнее редактирование: 30.06.2015 10:49:46 от Skull »
Андрей Черепанов (cas@)

Оффлайн ruslandh

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

$ blkid /dev/sda1 | sed -n 's|\bUUIID=\"\(.*\)\"|\1|p'
Пусто - что я не так написал?

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
1. очепаятка в UUIID
2. ".*" - штука "жадная", потому схватит до последней кавычки, а не до первой. Из-за этого я использовал вариант "не кавычка" в своём примере.
3. Всё, что до UUID, и после последней кавычки, в паттерн заменяемый не попадает, потому останется. То есть, ".*" в начале и в конце нужны. Ну и привязка к началу (^) и концу ($) сторки не повредит тоже.
« Последнее редактирование: 30.06.2015 10:41:16 от asy »

Оффлайн ruslandh

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

Может кому-то пригодится парочка скриптов для монтирования и размонтирования разделов в /mnt.
Удобно для работы в "незнакомой системе", затачивалось под другой Linux, в частности Esq последовательности в цвете не отрабатывают.

PS Возможно этот тест надо куда-нибудь перенести, но пока пусть тут будет.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Напишу, здесь т.к. нечто похожее нужно.

Дана такая строка:
начало_ещё_есть <a ...тут параметры различные...">(тут_написано) тут_ещё_что-то (и_так_ещё) - ещё, (ещё), конец</a>
Мне нужно то, что внутри ссылки находится, при этом нужно отсечь то, что находится в первых скобках вместе с пробелом, делаю так:
sed 's|.*<a .*\">(.*) \([^\]*\)</a>|\1|'но тогда отсекается вот так:
- ещё, (ещё), конецА нужно так:
тут_ещё_что-то (и_так_ещё) - ещё, (ещё), конецНе могу понять куда нужные части добавить.
Помогите, пожалуйста.

UPD: Добил таки:
sed 's|.*<a .*\">([^)]*) \([^\]*\)</a>|\1|'
« Последнее редактирование: 10.07.2015 18:33:07 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Не успел. :-) Но
sed 's|.*">[^)]*) \(.*\)<.*|\1|'

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
sed 's|[.*<a .*\"]>(.*) \([^\]*\)</a>|\1|'
?

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
ruslandh
Неее, так не работает.
$ echo 'начало_ещё_есть <a ...тут параметры различные...">(тут_написано) тут_ещё_что-то (и_так_ещё) - ещё, (ещё), конец</a>'| sed 's|[.*<a .*\"]>(.*) \([^\]*\)</a>|\1|'
начало_ещё_есть <a ...тут параметры различные...- ещё, (ещё), конец

asy
Дааа, я чёт немного перемудрил :-)
« Последнее редактирование: 10.07.2015 21:18:59 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Но
Ммм... а у меня ещё внутри ссылки есть спец знаки, типа &amp;, их можно как-то сразу убрать или только через ещё один 'sed ... | sed ...' ?
Просто интересно...

PS. Хотя их наверно придётся каждый отдельно... &amp; на & и т.д.
« Последнее редактирование: 10.07.2015 21:15:19 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
их можно как-то сразу убрать или только через ещё один 'sed ... | sed ...' ?
Просто интересно...
echo 123 abc | sed 's|2||; s|b||;'
"&amp;", наверное, "&[a-zA-Z]+;"
« Последнее редактирование: 10.07.2015 22:33:17 от asy »