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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: sed не хочет работать с \n  (Прочитано 1883 раз)

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

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
sed не хочет работать с \n
« : 21 Декабря 2009, 11:52:35 »
Добрый всем день/утро/вечер/ночь!
(Тема, наверное, не имеет отоношение к программированию, но не засорять же общий форум такими частными вопросами =)

В общем, не работает такая конструкция:
cat text1.txt | sed "s/\n\n/&/g" > text2.txtПричем, например, команда tr делает все как надо
cat text1.txt | tr "\n" "&" > text2.txtНо, к сожалению, только с символами работает, а надо заменить именно два подряд идущих перевода строки.

Может, sed не хочет работать с UTF-8? (Да, кстати, текст на русском).

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #1 : 21 Декабря 2009, 12:13:52 »
sed работает с одной строкой (точнее построчно).
Подумайте над этим и туманы рассеются.
Варианты на Ваш выбор.
Посмотрите на утилиту tr.
Посмотрите на удаление строки с помощью sed с шаблоном ^$.
Посмотрите на цикл с использованием echo -n
Тема уже муссировалась на моей памяти только - 2 раза. Поиск в руки.
Подумал, что Вас, наверное, интересует шаблон пустой строки (^$).
« Последнее редактирование: 21 Декабря 2009, 12:18:41 от alexander.pronin »

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #2 : 21 Декабря 2009, 22:16:26 »
спасибо за ответ!
Я поначалу заглянул в гугл, и там пишут s/\n//, поэтому я и не подумал даже про то, что sed тока со строками работает  :)
tr, к сожалению (как я понимаю) заменяет символ на символ, так что не подходит =(

А задача у меня простая: есть текст, разбитый на строки и абзацы, абзацы отделяются двумя \n, а строки - одним.
Надо, чтобы строки слились в одну, а абзацы стали одинарным \n.
« Последнее редактирование: 22 Декабря 2009, 00:25:45 от Saha »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #3 : 21 Декабря 2009, 22:46:44 »
Как вариант:
awk '/^$/{print}{printf $0}' text1.txt

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #4 : 22 Декабря 2009, 00:28:32 »
Как вариант:
awk '/^$/{print}{printf $0}' text1.txt
чего-то не работает... =(

В общем, проблему решил таким "извращенским" способом:
cat text1.txt | tr "\n" "%" | sed "s/%%/$/g" | tr "%" " " | tr "$" "\n" > text2.txt% и $  - как вспомогательные символы (которые, я надеюсь, в тексте уж точно не встречаются=)
« Последнее редактирование: 22 Декабря 2009, 00:41:47 от Saha »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #5 : 22 Декабря 2009, 00:45:52 »
(Нажмите, чтобы показать/скрыть)
Разве задача была иная?

Оффлайн Saha

  • Автор темы
  • Активист
  • *
  • Сообщений: 517
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #6 : 22 Декабря 2009, 00:53:31 »
Задача именно такая, но почему-то не сработала эта команда на моем файле   ???

В общем, после работы этой командой какой-то странный файл на выходе. cat ничего не показывает, gedit показывает, как будто ничего не изменилось, при копировании в буфер из него и вставке на форум вставляется измененный текст   :o
« Последнее редактирование: 22 Декабря 2009, 01:02:28 от Saha »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: sed не хочет работать с \n
« Ответ #7 : 22 Декабря 2009, 08:15:45 »
Еще вариант.
cat file | grep -v "^$" >file
К храму  идет много дорог (Ц).

 

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