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


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

Автор Тема: Как извлечь поля в многострочном текстовом файле  (Прочитано 616 раз)

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

Оффлайн vento1980

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Подскажите как оформить регулярное выражение sed для извлечения данных из текстового файла следующей структуры:

МЕТКА1 (ПОЛЕ1)
ПОЛЕ2
<пустая строка>
МЕТКА2
ПОЛЕ3.1
...
ПОЛЕ3.n
<пустая строка>
МЕТКА3
ПОЛЕ4

Нужно последовательно извлечь ПОЛЕ1, ПОЛЕ2, ПОЛЕ3, ПОЛЕ4 для дальнейшей обработке в скрипте bash. Поля представляют собой строки из нескольких слов (фразы). ПОЛЕ3.1...ПОЛЕ3.n нужно "вытащить" одной строкой, разделенную запятыми. Метки не должны попасть в переменные скрипта.

Буду благодарен за любую помощь (какие команды sed нужно использовать, ссылки на аналогичные примеры, конкретные примеры реализации).

Оффлайн БТР

  • Заслуженный пользователь
  • Модератор форума
  • Старожил
  • *
  • Сообщений: 5182
    • Просмотр профиля

Оффлайн vento1980

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Спасибо за ссылки. Очень помогли. Вот что получилось:
...
    fld1=`cat "$fn" | sed '1!d;s/МЕТКА1 (//;s/)//'`
    fld2=`cat "$fn" | sed '2!d'`
    fld3=`cat "$fn" | sed -e '1,4d' -e ':a' -e '$d;N;2,3ba' -e 'P;D'`
    fld4=`cat "$fn" | sed '$!d'`
...

Осталась одна проблема, может кто сталкивался и подскажет: в fld3 нужно заменить \r\n на ", " (запятую с пробелом), а команда sed 's/\r\n/, /g' не работает. Где ошибся?

Оффлайн Riateche

  • Активист
  • *
  • Сообщений: 279
    • Просмотр профиля
    • Idzaaus
попробуйте 's/\n/, /g'

Оффлайн vento1980

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Не работает

Пользователь решил продолжить мысль 03 Январь 2011, 00:03:19:
Вот так проверяю:
echo -e "abc\ndef" | sed 's/\n/xxx/g'
« Последнее редактирование: 03 Январь 2011, 00:03:19 от vento1980 »

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
cat ./file | paste -s -d ', '
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

 

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