Решено: удалить в тексте переносы строк

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

xa3ap
Сообщения: 17
ОС: slackware,debian

Решено: удалить в тексте переносы строк

Сообщение xa3ap »

имеется plain text, каким то мудаком разбитый переносами по 80 символов. как удалить эти переносы. но оставить пробелы перед абзацами?

заранее благодарю.
Спасибо сказали:
Аватара пользователя
Nikky
Сообщения: 339
ОС: Debian GNU/Linux

Re: Решено: удалить в тексте переносы строк

Сообщение Nikky »

В любом текстовом редакторе - "Поиск и замена".
Арфы нет - возьмите бубен...
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Решено: удалить в тексте переносы строк

Сообщение allez »

cat plain.txt | tr "\n" " " > new.txt
tr "\n" " " < plain.txt > new.txt

P. S. И не следует называть чудаками на букву "м" незнакомых (и, скорее всего, ничем вам не обязанных) людей только потому, что вам не понравилось форматирование текстового файла. ;)
Спасибо сказали:
xa3ap
Сообщения: 17
ОС: slackware,debian

Re: Решено: удалить в тексте переносы строк

Сообщение xa3ap »

allez писал(а):
24.05.2009 15:57
cat plain.txt | tr "\n" " " > new.txt
tr "\n" " " < plain.txt > new.txt

P. S. И не следует называть чудаками на букву "м" незнакомых (и, скорее всего, ничем вам не обязанных) людей только потому, что вам не понравилось форматирование текстового файла. ;)


мне надо ещё учитывать новые абзаци (они выглядят как "\n " - новая строка и пробелы в начале строки). по идее должно работать:

cat plain.txt | tr "\n " "***" > new.txt
cat new.txt | tr "\n" " " > tmp.txt
cat tmp.txt | tr "***" "\n" > new.txt

но вместо нормального результата выходит ч.з.ч. кажется, дело в том, что текст 'выровнен' - сплошь и рядом встречаются два и больше пробелов вместе.
обьясните, пожалуйста, в чем тут дело? таки напишите скрипт Работающий.
Спасибо сказали:
Аватара пользователя
izen.fire
Сообщения: 268
ОС: Windows XP

Re: Решено: удалить в тексте переносы строк

Сообщение izen.fire »

Загрузить/импортировать файл в текстовый процессор как "текстовый файл" — концевые символы перевода строки должны исчезнуть.
Ротор поля наподобие дивергенции градуирует себя вдоль спина и там внутре ево неонка.
Спасибо сказали:
xa3ap
Сообщения: 17
ОС: slackware,debian

Re: Решено: удалить в тексте переносы строк

Сообщение xa3ap »

iZEN писал(а):
24.05.2009 18:08
Загрузить/импортировать файл в текстовый процессор как "текстовый файл" — концевые символы перевода строки должны исчезнуть.


не знаю, о чем вы, но вим переносы показывает. емакс тоже.
Спасибо сказали:
Аватара пользователя
izen.fire
Сообщения: 268
ОС: Windows XP

Re: Решено: удалить в тексте переносы строк

Сообщение izen.fire »

xa3ap писал(а):
24.05.2009 19:27
не знаю, о чем вы, но вим переносы показывает. емакс тоже.
AbiWord, OpenOffice Writer, MS Word могут делать из текстового файла документ с правильной разбивкой на абзацы без строк с концевыми символами и сохранять этот документ в обычном текстовом файле.
Ротор поля наподобие дивергенции градуирует себя вдоль спина и там внутре ево неонка.
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Решено: удалить в тексте переносы строк

Сообщение uptime »

xa3ap писал(а):
24.05.2009 16:57
...по идее должно работать:

cat plain.txt | tr "\n " "***" > new.txt
cat new.txt | tr "\n" " " > tmp.txt
cat tmp.txt | tr "***" "\n" > new.txt

но вместо нормального результата выходит ч.з.ч....

Мне идея понравилась. Что же не так? Покажите, плиз, исходный текст (можно кусочек) и результат выполнения первой команды.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: удалить в тексте переносы строк

Сообщение drBatty »

xa3ap писал(а):
24.05.2009 15:31
имеется plain text, каким то мудаком разбитый переносами по 80 символов. как удалить эти переносы. но оставить пробелы перед абзацами?

Код: Выделить всё

sed -rn '
/^( |$)/{x;s/\n/ /g;p;$!b;$x}
$!H
$p'

вот только если текст начинается с "пробелXXX", то вставляется пустая строка в начале. можете поменять, если это критично...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
xa3ap
Сообщения: 17
ОС: slackware,debian

Re: Решено: удалить в тексте переносы строк

Сообщение xa3ap »

uptime писал(а):
24.05.2009 22:06
xa3ap писал(а):
24.05.2009 16:57
...по идее должно работать:

cat plain.txt | tr "\n " "***" > new.txt
cat new.txt | tr "\n" " " > tmp.txt
cat tmp.txt | tr "***" "\n" > new.txt

но вместо нормального результата выходит ч.з.ч....

Мне идея понравилась. Что же не так? Покажите, плиз, исходный текст (можно кусочек) и результат выполнения первой команды.


да не работает оно. http://az.lib.ru/b/bulxwerlitton_e_d/text_0060.shtml

drBatty писал(а):
25.05.2009 02:10
xa3ap писал(а):
24.05.2009 15:31
имеется plain text, каким то мудаком разбитый переносами по 80 символов. как удалить эти переносы. но оставить пробелы перед абзацами?

Код: Выделить всё

sed -rn '
/^( |$)/{x;s/\n/ /g;p;$!b;$x}
$!H
$p'

вот только если текст начинается с "пробелXXX", то вставляется пустая строка в начале. можете поменять, если это критично...



ничего не понял. иду курить ман по sed'у.
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Решено: удалить в тексте переносы строк

Сообщение uptime »

xa3ap писал(а):
25.05.2009 23:28
да не работает оно. http://az.lib.ru/b/bulxwerlitton_e_d/text_0060.shtml


у меня вот такая комбинация сработала:

Код: Выделить всё

sed s/"^ "/"abc"/g text.txt > new1.txt
cat new1.txt | tr "\n" " " > new2.txt
cat new2.txt | tr "abc" "\n " > new3.txt

но вначале ещё перекодировать пришлось из cp1251 в utf8.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
xa3ap
Сообщения: 17
ОС: slackware,debian

Re: Решено: удалить в тексте переносы строк

Сообщение xa3ap »

uptime писал(а):
26.05.2009 00:38
xa3ap писал(а):
25.05.2009 23:28
да не работает оно. http://az.lib.ru/b/bulxwerlitton_e_d/text_0060.shtml


у меня вот такая комбинация сработала:

Код: Выделить всё

sed s/"^ "/"abc"/g text.txt > new1.txt
cat new1.txt | tr "\n" " " > new2.txt
cat new2.txt | tr "abc" "\n " > new3.txt

но вначале ещё перекодировать пришлось из cp1251 в utf8.


спасибо, работает!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: удалить в тексте переносы строк

Сообщение drBatty »

xa3ap писал(а):
25.05.2009 23:28
ничего не понял. иду курить ман по sed'у.

главное - работает :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: удалить в тексте переносы строк

Сообщение sash-kan »

1. делаем абзацы из пяти пробелов в начале строки, эскейпим _, { и }, встречающиеся в тексте (ещё надо эскейпить #, $, %, &, но они в тексте не встречаются):

Код: Выделить всё

sed -i 's/     /\n/;s/_/\\_/g;s/{/\\{/g;s/}/\\}/g' b.latex


2. добавляем в начало:

Код: Выделить всё

\documentclass[russian,a4paper]{book}
\usepackage[utf8x]{inputenc}
\usepackage{babel}
\usepackage{ucs}
\usepackage{indentfirst}
\begin{document}
а в конец:

Код: Выделить всё

\end{document}


3. $ pdflatex b.latex

4. получаем b.pdf.

некрасиво, конечно, зато читабельно. доделка до нормальной книги — в качестве домашнего задания.

файлы прилагаю.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
xa3ap
Сообщения: 17
ОС: slackware,debian

Re: Решено: удалить в тексте переносы строк

Сообщение xa3ap »

перемудрили. все проще: man paste
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: удалить в тексте переносы строк

Сообщение drBatty »

sash-kan писал(а):
26.05.2009 22:13
1. делаем абзацы из пяти пробелов в начале строки, эскейпим _, { и }, встречающиеся в тексте (ещё надо эскейпить #, $, %, &, но они в тексте не встречаются):

Код: Выделить всё

sed -i 's/     /\n/;s/_/\\_/g;s/{/\\{/g;s/}/\\}/g' b.latex

кстати. хороший пример. если вы не против, я его позаимствую, о том как НЕ НАДО писать. мне без поллитры и не разобраться.. Думаю всем по барабану, но для многих { это скобка, а вот \{ это НЕ скобка - у вас - на оборот :(
хотя конечно это касается только оформления...

xa3ap писал(а):
29.05.2009 15:04
перемудрили. все проще: man paste

я знал. однако думаю, что вас это многому научило ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: удалить в тексте переносы строк

Сообщение sash-kan »

drBatty писал(а):
29.05.2009 17:11
sash-kan писал(а):
26.05.2009 22:13
1. делаем абзацы из пяти пробелов в начале строки, эскейпим _, { и }, встречающиеся в тексте (ещё надо эскейпить #, $, %, &, но они в тексте не встречаются):

Код: Выделить всё

sed -i 's/     /\n/;s/_/\\_/g;s/{/\\{/g;s/}/\\}/g' b.latex

кстати. хороший пример. если вы не против, я его позаимствую, о том как НЕ НАДО писать. мне без поллитры и не разобраться.. Думаю всем по барабану, но для многих { это скобка, а вот \{ это НЕ скобка - у вас - на оборот :(
хотя конечно это касается только оформления...
что-то я совсем не понял вашей мудрой мысли.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: удалить в тексте переносы строк

Сообщение drBatty »

sash-kan писал(а):
29.05.2009 21:43
что-то я совсем не понял вашей мудрой мысли.

я сам не совсем понял. просто я-же привык к тому, что {/\\{/g;s/}/\\} это одна команда, вроде

Код: Выделить всё

int main()
{
 {
  printf("");
  return 0;
 }
}
вот сидел, и думал, как это вы засунули вложенные блоки {} в sed...
на самом деле, это всего-лишь экранирование скобок...
в общем - одностроки - непонятное зло :)
запутался я...

Код: Выделить всё

#!/bin/sed
s/     /\n/
s/_/\\_/g
s/{/\\{/g
s/}/\\}/g

Вот в таком виде это ИМХО более понятно.
sed -f latex.sed -i b.latex
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: удалить в тексте переносы строк

Сообщение sash-kan »

drBatty писал(а):
30.05.2009 02:35
вот сидел, и думал, как это вы засунули вложенные блоки {} в sed...
привычка использовать ключи к месту и не к месту (я про -r) зашорила ваше сознание.

p.s. кстати, обожаю однострочники. за неоценимый бонус — они хранятся в .bash_history.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Решено: удалить в тексте переносы строк

Сообщение drBatty »

sash-kan писал(а):
30.05.2009 03:04
привычка использовать ключи к месту и не к месту (я про -r) зашорила ваше сознание.

угу...

sash-kan писал(а):
30.05.2009 03:04
p.s. кстати, обожаю однострочники. за неоценимый бонус — они хранятся в .bash_history.

потому и предложил засунуть этот скрипт в файл, ведь он понадобится много раз, кроме того, если вам вдруг попадётся текст с #, который у вас не обработается, вы поменяете файл с sed-скриптом, а строчка в history будет работать правильно(уже по новому).

PS я бы вобще 3 строчки свёл-бы к одной

Код: Выделить всё

s/[{}_\#]/\\&/g

это где вы экранируете...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: