Перейти к содержимому

Как убрать переносы в линуксе

  • автор:

Как убрать переносы в линуксе

Адвокат по уголовным делам белая церковь. Адвокаты по уголовным делам в наро-фоминске.

Глава 8. Расстановка переносов
Пред. Часть II. Основы работы с текстовыми документами След.

Глава 8. Расстановка переносов

Для большей удобочитаемости документа можно использовать выравнивание параграфов по левому и правому краям, однако это не всегда приемлемо. В этом случае увеличивается расстояние между символами в тексте, что особенно заметно при наличии в тексте длинных слов; разумеется, лучше всего воспользоваться переносами.

Чтобы OpenOffice.org Writer имел возможность расставлять переносы в тексте, нужно установить в свойствах языка “Русский” (меню Сервис->Параметры. +Настройка языка+Языки, поле Западные).

Расстановку переносов можно производить автоматически или вручную.

Автоматическая расстановка переносов устанавливается в свойствах параграфа в диалоге установки свойств стиля параграфа на закладке Положение на странице в разделе Расстановка переносов нужно включить опцию Автоматически.

Для расстановки мягких (рекомендуемых) переносов нужно установить курсор в место, где можно делать перенос и вставить символ мягкого переноса комбинацией клавиш Ctrlминус. Можно произвести поиск всех слов, которые можно перенести, с помощью функции Расстановка переносов в меню Сервис.

Рисунок 8.1. Расстановка переносов

Расстановка переносов

Знак “=” означает место возможного переноса; “-” указывает на место, в котором он однозначно будет произведён. Чтобы установить перенос, нажмите на кнопку Перенести; для прекращения расстановки переносов служит кнопка Отмена.

Кнопка Далее переходит на следующее слово без установки переноса в этом слове.

С помощью кнопки Убрать убирается ранее установленный перенос слова.

Если нужно, чтобы слово никогда не переносилось, нужно добавить его в словарь со знаком “=” в конце.

Пред. Уровень выше След.
Глава 7. Проверка правописания Начало Глава 9. Применение функции Найти и заменить

Как удалить newline (символ новой строки) из вывода команд и файлов в командной строке Linux

Как удалить newline (перевод строки) из строки в Bash

Для перевода строки в операционных системах используются символы:

Причём в Linux используется \n (также называется EOL, End of Line, newline, новая строка). В других операционных системах могут быть вариации.

По умолчанию многие программы, утилиты командной строки Linux автоматически добавляют символ newline — в целом это делает вывод более читаемым. Но иногда символ перевода строки не нужен. Эта заметка посвящена тому, как убрать из строки вывода или из строк файла символ новой строки (newline).

Как удалить символ newline из строки

echo

Если вы выводите строку или результат выполнения команды с помощью «echo», то вы можете использовать опцию -n, которая означает не выводить конечный символ newline.

Обратите внимание на различный результат команд:

echo -n 'HackWare.ru' | md5sum ce7d43633e2bfb3d283f2cfbdbeb0d2a - echo 'HackWare.ru' | md5sum 19acfcdef400742c5de064e0bf9e9a87 -

Первая команда считает контрольную сумму строки «HackWare.ru», а вторая команда считает контрольную сумму строки «HackWare.ru» к которой добавлен конечный символ newline.

tr

Вы можете удалить конечный символ новой строки с помощью tr в конструкции

tr -d '\n'
echo 'HackWare.ru' | tr -d '\n' | md5sum ce7d43633e2bfb3d283f2cfbdbeb0d2a -

sed

Вы можете удалить конечный символ новой строки с помощью sed в конструкции (данная команда удаляет символы «\n» и «\r»:

sed -z 's/[\n\r]//g'
echo 'HackWare.ru' | sed -z 's/[\n\r]//g' | md5sum ce7d43633e2bfb3d283f2cfbdbeb0d2a -

Perl

Следующая конструкция на PERL также удаляет символ новой строки:

perl -pe 'chomp'
echo 'HackWare.ru' | perl -pe 'chomp' | md5sum ce7d43633e2bfb3d283f2cfbdbeb0d2a -

Ещё один пример использования:

wc -l < log.txt | perl -pe 'chomp'

awk

С помощью awk вы можете удалить символы newline (новой строки) используя следующую конструкцию:

echo 'HackWare.ru' | awk '< printf "%s", $0 >' | md5sum

Смотрите также: Уроки по Awk

Ещё один вариант:

echo 'HackWare.ru' | awk '' | md5sum

Удаление newline из результатов выполнения команды

Все предыдущие примеры можно использовать для удаления newline из вывода команд, передав вывод по конвейеру (трубе, «|»). Далее приведены ещё несколько конструкций, которые вы можете использовать для удаления newline из результатов выполнения команды.

printf

Поместите КОМАНДУ в конструкцию вида:

printf '%s' $(КОМАНДА)

Будет выведен результат выполнения КОМАНДЫ без конечного символа newline.

printf '%s' $(echo 'HackWare.ru') | md5sum

xargs и echo

Для подавления вывода символа новой строки newline вы можете использовать конструкцию с xargs:

КОМАНДА | xargs echo -n

Будьте внимательны с предыдущей конструкцией, поскольку она также ещё и сжимает пробелы. Чтобы понять о чём идёт речь, изучите вывод следующей команды:

echo "a b" | xargs echo -n; echo -n $(echo "a b")

Поскольку xargs может быть очень медленной, вы можете использовать следующую конструкцию:

echo -n `КОМАНДА`

Помните, что если вывод начинается с -e, то предыдущая конструкция будет истолковывать вывод как опцию echo.

Подстановка команды

В следующих примерах команда, заключённая в "$(КОМАНДА)" будет выведена без конечного newline:

echo -n "$(wc -l < log.txt)" printf "%s" "$(wc -l < log.txt)"

Как удалить только последний символ newline из многострочного вывода

Все предыдущие примеры подразумевают, что удаление символа выполняется из однострочного вывода. Если вам нужно удалить последний символ из многострочного вывода, то далее показано, как это сделать.

Perl

Следующая команда выведет содержимое файла log.txt, при этом будет удалён только один символ newline в самом конце файла, все остальные newline будут сохранены. Особенностью команды является то, что даже если файл заканчивается на несколько символов newline, все они будут удалены.

perl -pe 'chomp if eof' log.txt

printf

Следующий пример также удалит символ newline в конце файла log.txt, но удалён будет строго ПОСЛЕДНИЙ символ newline:

printf "%s" "$(< log.txt)"

Как удалить newline из файла в Bash

Вы можете использовать вывод содержимого файла в паре с любой из перечисленных выше конструкций для удаления newline. Например:

cat log.txt | tr -d '\n'

Аналог предыдущей команды:

tr -d '\n' < log.txt

Команды awk, sed, perl и другие могут как обрабатывать стандартный ввод, так и получать имена файла, который нужно обработать (удалить символы newline) в виде опции. Примеры:

awk '< printf "%s", $0 >' log.txt awk '' file sed ':a;N;$!ba;s/\n//g' file.txt perl -p -i -e 's/\R//g;' filename

Как удалить newline из переменной в Bash

Для удаления символа newline (или любых других символов) вы можете использовать Pattern substitution (разновидность Shell Parameter Expansion), формат следующий:

  • Для удаления всех совпадений:
  • Для удаления первого совпадения:
  • Для удаления совпадения в конце строки:
  • Удаление всех совпадений и присвоение нового значения этой же переменной:
VARIABLE=$

При этом символ newline (\n) нужно экранировать обратным слэшом.

Вывод переменной без удаления newline:

text='hello\n\nthere\nagain\n' echo -e $

hello there again

Вывод переменной с удалением всех newline:

text='hello\n\nthere\nagain\n' echo -e $
hellothereagain

Вывод переменной с удалением только первого newline:

text='hello\n\nthere\nagain\n' echo -e $
hello there again

Вывод переменной с удалением последнего newline:

text='hello\n\nthere\nagain\n' echo -e $
hello there again

Как заменить newline ("\n") на пробел (" ")

tr

Чтобы заменить newline ("\n") на пробел вы можете использовать следующую конструкцию:

tr '\n' ' '
echo -e 'hello\n\nthere\nagain\n' | tr '\n' ' '

sed

sed ':a;N;$!ba;s/\n/ /g' FILE

Кросс-платформенный совместимый синтаксис, который работает с BSD и OS X sed:

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' FILE

В GNU sed есть опция -z для записей (строк), разделённых нулём. Вы можете просто вызвать:

sed -z 's/\n/ /g'
sed -z 's/\n/ /g' FILE

Bash

while read line; do printf "%s" "$line "; done < FILE

Ещё один вариант:

cat FILE.txt | while read line; do echo -n "$line "; done

Ещё один вариант написания:

while read line; do echo -n "$line "; done < FILE.txt

Perl

Решение на perl, скорость примерно как с sed:

perl -p -e 's/\n/ /' FILE

paste

Решение с paste, скорость примерно как с tr, может заменять только один символ:

paste -s -d ' ' FILE

awk

Решение с awk, скорость примерно как с tr:

awk 1 ORS=' ' FILE

Программа awk состоит из правил, состоящих из условных кодовых блоков, то есть:

условие

Если кодовый блок опущен, используется значение по умолчанию: . Таким образом, 1 всегда интерпретируется как истинное условие, и для каждой строки выполняется print $0.

Когда awk читает ввод, он разбивает его на записи на основе значения RS (Record Separator, разделитель записей), который по умолчанию является newline (новой строкой), поэтому awk по умолчанию будет анализировать ввод построчно. Разделение также включает удаление RS из входной записи.

Теперь при печати записи к ней добавляется ORS (Output Record Separator, разделитель выходных записей), по умолчанию снова newline. Таким образом, поскольку мы заменили значение ORS на пробел, все символы новой строки заменяются пробелами.

Смотрите также: Уроки по Awk

Ещё один вариант, чтобы заменить все новые строки пробелами с помощью awk, не считывая весь файл в память:

awk '' FILE

Если вы хотите, чтобы присутствовал финальный newline:

awk ' END ' FILE

Вы можете использовать не только символ пробела (в данном случае вместо пробела разделителем является символ «|»):

awk ' END ' FILE

Ещё одно просто решение на awk:

awk '' FILE

xargs

Простое решение на xargs:

Как убрать перенос строк с помощью sed?

illifant и mm3 большое спасибо. Ваши ответы очень помогли.

Lebaner
01.06.12 00:58:46 MSK
anonymous
( 01.06.12 01:04:32 MSK )

если нужно удалить все \n, то проще использовать

tr -d '\n' < 1.txt

если с условиями или именно sed'ом, то читать сюда http://www.grymoire.com/Unix/Sed.html#uh-51
illifant
( 01.06.12 01:10:36 MSK )

sed ':a; /$/N; s/\n//; ta'

mm3 ★★★
( 01.06.12 01:26:06 MSK )
Ответ на: комментарий от mm3 01.06.12 01:26:06 MSK

А зачем там «/$/N» вместо просто «N»?

kim-roader ★★
( 01.06.12 01:45:59 MSK )

Тема обсосана на stackoverflow.

r2d2
( 01.06.12 01:49:28 MSK )
Ответ на: комментарий от anonymous 01.06.12 01:04:32 MSK

Сам-то видел эти маны?

r2d2
( 01.06.12 01:49:59 MSK )
Ответ на: комментарий от r2d2 01.06.12 01:49:59 MSK

Мёсье не осилил увидеть команды : и t на видном месте в мане, и теперь со всех требует прув, не допуская существования более вдумчивых людей?

anonymous
( 01.06.12 04:46:21 MSK )
Ответ на: комментарий от kim-roader 01.06.12 01:45:59 MSK

без понятия что означают все эти 20 символов (объяснил бы хоть кто), но они работают.

mm3 ★★★
( 01.06.12 10:21:17 MSK )

Здесь куча способов удалить '\n' на разных языках.

gentoo_root ★★★★★
( 01.06.12 12:33:46 MSK )
Ответ на: комментарий от mm3 01.06.12 10:21:17 MSK

Эти? 1) метка 2) добавляем к текущей строке сдедующую (через \n) 3) удаляем разделитель 3) если команда s/// что-то сделала - переходим на метку.

Видно, что /$/ - лишний, но /../ может пригодиться, например: /\\$/.

Удалить перенос строки, если строка не пустая

сначала в пустые строки вставляем пару символов carriage return (0x0d, \r), которые на последнем шаге заменим на символы line feed (0x0a, \n).

затем удаляем все символы line feed.

последний шаг: заменяем все carriage return на line feed.

вместо carriage return можно использовать любой другой символ, который заведомо не встречается в исходном файле.

результирующий файл получится без завершающего символа \n, что не принято у текстовых файлов. чтобы этого избежать, можно в программе для sed сразу добавлять в конце последней строки символ-подмену:

$ cat file | sed 's/^$/\r\r/;$s/$/\r/' | tr -d '\n' | tr '\r' '\n' 

обновление

в общем-то, можно обойтись только вызовом sed, без символа-подмены, и без tr, но программа для sed получается несколько громоздкой:

$ cat /tmp/file | sed -n '/^$/!H;/^$/;$' 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *