2

Использование sed для создания текста, который содержит определенные символы, подходящие для использования в строковых литералах, прост:

sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"

Но как я могу сделать нечто подобное с текстовым файлом, содержащим символы новой строки?

4 ответа4

3

Использование:

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

Который использует ответ из Как я могу заменить символ новой строки (\n) с помощью sed? замена экранированного символа новой строки в качестве замены, чтобы соответствовать вопросу здесь.

0

sed основан на строках, и это может вызвать проблемы при попытке заменить символы новой строки.

Официальная документация для sed содержит конкретную ссылку на символы новой строки и утверждает, что они удаляются перед передачей в sed.

Я бы предположил, что «tr», вероятно, будет лучше здесь.

Например, чтобы заменить символы новой строки пробелами:

tr '\n' ' ' < inputfile
0

Я хотел бы расширить решение Дэвида Мойтана :

cat /etc/passwd | perl -e 'while(<>) { $_ =~ s/[\r\n]/__NEWLINE__/g; print "$_" }'
0

У меня тоже была эта пробема.

Вы можете использовать функцию \a для запуска каждой новой строки с правильной escape-последовательностью, а затем передать полученную функцию в echo -n, которая подавляет новые строки.

echo -n $(sed '\a
\\n');

Вставьте все, что вы собираете в скобках перед командой sed.

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