Пожалуйста, смотрите изображение:

альтернативный текст

Какое регулярное выражение удалит все окончания строк только из непустых строк (не удаляя их из пустых строк? Это из текстового файла длиной более 8000 строк.

64-битная Vista.

4 ответа4

1

Если вы пытаетесь преобразовать абзацы, у которых есть разрывы строк в конце каждой строки, в непрерывный текст внутри каждого абзаца:

Сейчас настало время для всего хорошего \n
люди, чтобы прийти на помощь их \n
страна \ п
\ п

в

Настало время всем добрым людям прийти на помощь своей стране \n
\ п

Тогда что-то вроде этого должно работать:

sed -n '1{x;d};H;${x;s|\([^\n]\)\n\([^\n]\)|\1 \2|gp}' file

или же

sed ':a;$!N;s|^\n||;s|\n\([^\n]\+\)$| \1|;ta;p;D' file
1

Мой беспорядочный метод - открыть его словом, найти и заменить на ^ p ^ p (два конечных абзаца подряд) символом, не используемым в файле, например "|". Тогда я заменил бы все ^ p только пробелом. Тогда я бы вернулся и заменил т "|" с ^ р.

0

Это зависит от того, какой пакет регулярных выражений у вас есть, независимо от того, ожидаете вы или нет.

Я бы лично сделал:

- удалить завершающие пробелы, это гарантирует, что «пустые» строки \n \n

s/^[ \t][ \t]*$//

- если это единственный перевод строки, замените

s/([^\n])\n([^\n])/\1 \2/

это действительно зависит от вашего пакета регулярных выражений

0

с sed я бы сделал что-то вроде:

sed 's/[ \t]*$//'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .