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


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

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

Оффлайн alex-sky

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

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

Код: (Bash) [Выделить]
/^(.*)\n\1$/
Но по какой-то причине код не работает.

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

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

Код: (Bash) [Выделить]
sed -nr  "s:^(.*)\n\1$:-found-:p" ${file}
^ - поиск от начала строки
(.*) - подвыражение(найти любые символы, кроме символа перевода строки \n)
\n - ищется символ перевода строки, за ним сразу смотрится другая строка
\1 - здесь ищется то же, что и в подвыражении (.*) и до конца этой 2-й строки
:-found-: - найденное заменить словом -found-

Код: (Bash) [Выделить]
sed -nr  "s:^(.*)\s\1$:\1:p" ${file}
 А вот это работает почему-то.
Может кто-то знает в чем дело...



Оффлайн Azure

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

Оффлайн ReNzRv

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

 

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