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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: grep и группировка  (Прочитано 3352 раз)

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

Оффлайн U

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
grep и группировка
« : 25 Июля 2011, 19:40:54 »
Привет всем.
Мне нужно найти в файле такой текст: begintextend
т.е. вывести всё что находится между begin и end
Пробовал так:
grep -E "begin(text)end" file.txtНе работает именно группировка, мне надо вывести только text без begin и end:-\

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: grep и группировка
« Ответ #1 : 25 Июля 2011, 19:43:52 »
echo "begintextend" | grep -oe 'begin.*end' | sed 's/begin\|end//g'
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн U

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: grep и группировка
« Ответ #2 : 25 Июля 2011, 20:10:29 »
Спасибо, работает. Хотя, я надеялся обойтись без sed.

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: grep и группировка
« Ответ #3 : 25 Июля 2011, 22:39:15 »
begintextend

Это одно слово?

А вообще, для понятности и наглядности, надо приводить образец реального текста.

andrey_p

  • Гость
Re: grep и группировка
« Ответ #4 : 26 Июля 2011, 08:25:23 »
echo "begintextend" | grep -Po '(?<=begin).*(?=end)'
echo "begintextend" | sed -r '/(begin)(.*)(end)/ s//\2/'

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: grep и группировка
« Ответ #5 : 26 Июля 2011, 09:36:32 »
echo "begintextend" | sed -r '/(begin)(.*)(end)/ s//\2/'
Круто, мне понравилось.

andrey_p

  • Гость
Re: grep и группировка
« Ответ #6 : 26 Июля 2011, 09:49:22 »
Спасибо. Но с sed правильнее так (как обычно, мысля опосля :) ):

echo "begintextend" | sed -r '/^.*begin(.*)end.*$/ s//\1/'

Оффлайн U

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: grep и группировка
« Ответ #7 : 26 Июля 2011, 15:30:02 »
Чисто из спортивного интереса, все таки grep умеет работать с группировкой или нет?
Т.е. выводить только подстановки в круглых скобках.

andrey_p

  • Гость
Re: grep и группировка
« Ответ #8 : 26 Июля 2011, 17:09:42 »
Нет.

Пользователь решил продолжить мысль 26 Июля 2011, 17:13:14:
Хотя с группировкой работать умеет.  ;)
« Последнее редактирование: 26 Июля 2011, 17:13:14 от andrey_p »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: grep и группировка
« Ответ #9 : 27 Июля 2011, 08:32:39 »
Используйте sed, не промахнетесь.
grep по идеологии придумана для поиска строк в файле. А группировка - это скорее функция редактора, а еще точнее замены.
То, что grep сумела выбрать в выражении с группами - это не значит, что какая-то другая версия сумеет этот финт проделать так же успешно.
Но может я ошибаюсь.

andrey_p

  • Гость
Re: grep и группировка
« Ответ #10 : 27 Июля 2011, 08:45:25 »
С группировкой grep (egrep) может работать только в таком виде - '(RE1)...(RE2)\2 ... \1' - то есть для указания повторов.

 

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