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


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

Автор Тема: sed - проверка любых 2-х любых одинаковых строк  (Прочитано 191 раз)

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 118
    • Просмотр профиля
 Я  разбирал пример, найденный в сети

Цитировать
выражение совпадает с любыми двумя одинаковыми строкам, которые разделены символом новой строки.

Код: Bash
  1. /^(.*)\n\1$/

Но по какой-то причине код не работает.

Я написал небольшой скрипт

(Нажмите, чтобы показать/скрыть)

Код: Bash
  1. sed -nr  "s:^(.*)\n\1$:-found-:p" ${file}

^ - поиск от начала строки
(.*) - подвыражение(найти любые символы, кроме символа перевода строки \n)
\n - ищется символ перевода строки, за ним сразу смотрится другая строка
\1 - здесь ищется то же, что и в подвыражении (.*) и до конца этой 2-й строки
:-found-: - найденное заменить словом -found-

Код: Bash
  1. sed -nr  "s:^(.*)\s\1$:\1:p" ${file}

 А вот это работает почему-то.
Может кто-то знает в чем дело...



Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5126
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Дело в том что sed — это строковый редактор, он считывает и обрабатывает файл построчно, поэтому если принудительно не собирать строки в буфер, то обрабатываться одномоментно будет только 1 строка в которой нет символа \n
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн renzrv

  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Код: Bash
  1. sed -rz 's/([^\n]+)\n\1/-found-/g'

 

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