Сообщается, что апстрим и апстрим сообщают, что это было исправлено в 2015 году:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786705
однако я все еще вижу эту ошибку на моем Debian 8.8 с установленным debconf -1.5.56.all, машина была установлена в 2016 году.
чтобы исправить это, я побежалapt-get install debconf
вы можете запустить apt-get dist-upgrade
для обновления всех пакетов в системе, но будьте осторожны, он может обновиться до 8.8 -> 9.0
tr
, вероятно, лучший инструмент для этой работы. Попробуйте следующее
pbpaste | tr '\n' ' '
С вашей помощью я получаю следующий результат.
I cannot conceive that anybody will require multiplications at the rate of 40,000 or even 4,000 per hour... -- F. H. Wales (1936)
Я согласен с @QIS.
Есть несколько причин, по которым sed вам не подойдет.
Одна из них заключается в том, что по умолчанию sed
обрабатывает свой ввод построчно, и по этой причине sed
никогда не увидит новую строку как часть строки. По умолчанию это разделитель между строками .
Другое дело, что, хотя GNU sed
реализует '\n'
представление новой строки, BSDsed
(версия для OSX )этого не делает.
Только для будущих пользователей GNU sed
, которые могут прочитать ваш вопрос, GNU sed
можно указать обрабатывать входной файл как список строк с разделителями NUL -, используя опцию -z
. Предполагая, что ваш ввод не содержит байтов NUL, это может быть вариантом для пользователей GNU sed
:
$ pbpaste | sed -z 's/\n/ /g'
Одним из тривиальных (и не -рекомендуемых )методов является использование преимущества того факта, что когда echo
получает символы новой строки без кавычек в результате подстановки команд, он заменяет их пробелами. Кроме того, echo
преобразует несколько пробелов (или новых строк )в один пробел. Таким образом, вполне вероятно, что это сработает и для вас :
echo $(pbpaste)
Вы можете сделать это с помощьюsed
(даже без расширения GNU -z
slurp ), используя команду N
в цикле:
$ sed -e :a -e '$!N;s/ *\n */ /;ta' -e 'P;D' input
I cannot conceive that anybody will require multiplications at the rate of 40,000 or even 4,000 per hour... -- F. H. Wales (1936)
Для обсуждения по существу эквивалентной команды см., например, 40. Добавить строку к предыдущей, если она начинается со знака равенства "=" в Sed One -Объяснение вкладышей, часть я
И fmt
, и par
являются хорошими инструментами для повторного -форматирования текста.
Оба они могут использоваться для переформатирования текста в одну длинную строку после замены перевода строки пробелами (, например. сtr
):
$ tr '\n' ' ' < input.txt | fmt -w 999
I cannot conceive that anybody will require multiplications at the rate of 40,000 or even 4,000 per hour... -- F. H. Wales (1936)
$ tr '\n' ' ' < input.txt | par w999
I cannot conceive that anybody will require multiplications at the rate of 40,000 or even 4,000 per hour... -- F. H. Wales (1936)
Обратите внимание, что вывод функций fmt и par немного отличается. fmt имеет четыре пробела между ...
и --
, а par сводит их к одному пробелу.
Подробнее о fmt
иpar
:
fmt
— это стандартная утилита, которая существует уже несколько десятилетий и должна быть доступна практически в любой системе unix. В системах GNU/Linux он находится в пакете GNU coreutils
.
$ fmt < input.txt
I cannot conceive that anybody will require multiplications at the rate
of 40,000 or even 4,000 per hour...
-- F. H. Wales (1936)
Тем не менее, он очень прост и не позволяет в значительной степени контролировать способ переформатирования абзацев, а также не выполняет какой-либо специальной обработки начальных и/или конечных символов (, например >
цитирования в электронной почте или /*... */
комментарии ), что может привести к беспорядку.
par
гораздо более гибок и функционален. Он может переформатировать комментарии и текст в рамках стиля C /*... */
, сообщения электронной почты с несколькими уровнями цитирования и многое другое. Следующий пример не показывает, на что он действительно способен.
$ par < input.txt
I cannot conceive that anybody will require multiplications at the rate of
40,000 or even 4,000 per hour...
-- F. H. Wales (1936)
Следующий пример (изman par
)начинает показывать возможности par
:
Before:
John writes:
: Mary writes:
: + Anastasia writes:
: + > Hi all!
: + Hi Ana!
: Hi Ana & Mary!
Please unsubscribe me from alt.hello.
After "par Q+:+ q":
John writes:
: Mary writes:
:
: + Anastasia writes:
: +
: + > Hi all!
: +
: + Hi Ana!
:
: Hi Ana & Mary!
Please unsubscribe me from alt.hello.
Я использую его ежедневно из vi/vim с тех пор, как открыл для себя 1990-е годы, чтобы переформатировать электронные письма, которые я пишу (или электронные письма от других с нечитаемыми длинными строками ), комментариями к коду и другим текстом. ИМО, номинал обязателен, должен -иметь программу.