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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Помогите извлечь поле из строки (grep)  (Прочитано 793 раз)

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

Оффлайн good_sorcerer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Товарищи, есть необходимость получить файл с названием канала из следующей строки:
<prog sat_key="14" tp_key="913" service_key="1" tuner_type_idex="0" sat_type="S2" service_id="20105" pmt_pid="205" video_pid="305" audio_pid="405" pcr_pid="305" block="0" bskip="0" audio_lang="rus" audio_type="MPEG1 LAYER II" video_type="H264" provider="HTB+" encrypt="0x0500,0xff00," hd="1" name="Первый канал HD"/>
т.е. на выходе должно получиться "Первый канал HD"
В исходном файле более 100 подобных строк, названия каналов, соответственно, содержат разное количество символов, но структура строк одна и та же.
Бьюсь уже второй день с конвеерами, пока ничего не вышло. Есть идеи?
Спасибо.

Оффлайн zotkindm

  • Старожил
  • *
  • Сообщений: 2452
  • (K)Ub 14.04
    • Просмотр профиля

Оффлайн good_sorcerer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #2 : 13 Июня 2015, 12:55:46 »
http://softhelp.org.ua/?p=4943

это уже пробовал, получается

encrypt="0x0500,0xff00," hd="0" name="Первый канал HD" /></programs>

Оффлайн zotkindm

  • Старожил
  • *
  • Сообщений: 2452
  • (K)Ub 14.04
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #3 : 13 Июня 2015, 13:09:08 »
grep бла-бла-бла >> имя файла

Оффлайн good_sorcerer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #4 : 13 Июня 2015, 13:30:43 »
grep бла-бла-бла >> имя файла

осталось выяснить, что за бла-бла-бла :)

Оффлайн zotkindm

  • Старожил
  • *
  • Сообщений: 2452
  • (K)Ub 14.04
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #5 : 13 Июня 2015, 13:39:51 »
Во как надо cat /путь/к/файлу | grep <текст для поиска> >> /путь/к/файлу/сохранения.txtПример: cat /home/user/.profile | grep then >> /home/user/primer.txt
« Последнее редактирование: 13 Июня 2015, 13:41:33 от zotkindm »

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #6 : 13 Июня 2015, 13:52:04 »
Тут нужен awk, а не grep.
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3031
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #7 : 13 Июня 2015, 18:21:03 »
Если там поля разделены пробелами и пробелов не больше одного в каждом случае,
то проще cut.
Пётр.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #8 : 13 Июня 2015, 19:01:45 »
Код: (bash) [Выделить]
grep -oP ' name=\K"[^"]*"' /путь/к/файлу
Код: (bash) [Выделить]
sed -n 's/.* name=\("[^"]*"\).*/\1/p' /путь/к/файлу
Код: (bash) [Выделить]
awk -F"[=/]" '$(NF-2)~/ name$/{print $(NF-1)}' /путь/к/файлу
« Последнее редактирование: 13 Июня 2015, 19:19:49 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6736
  • 20% Cooler
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #9 : 13 Июня 2015, 22:20:19 »
Код: (bash) [Выделить]
cut -d\" -f38 /путь/к/файлу
« Последнее редактирование: 13 Июня 2015, 22:23:12 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #10 : 13 Июня 2015, 23:52:21 »
ALiEN175,
на выходе должно получиться "Первый канал HD"
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6736
  • 20% Cooler
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #11 : 14 Июня 2015, 18:37:12 »
Azure,
мда, недосмотрел) тогда так  :coolsmiley:
Код: (bash) [Выделить]
cut -d\" -f38 /путь/к/файлу | sed 's/^\|$/\"/g'
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Помогите извлечь поле из строки (grep)
« Ответ #12 : 14 Июня 2015, 19:29:34 »
ALiEN175,
Все-таки 1 команда лучше 2-х (раз уж все-равно sed используете). И потом, наверное, не всегда поле 38…
« Последнее редактирование: 20 Июня 2019, 06:26:44 от zg_nico »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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