sed -e 's/word1/word2/' -l 3 output > output2
Я тестирую эту команду. Я ожидал 3 символа для каждой строки. Но это не работает. output2
имеет те же разрывы строк, что и output
. Я неправильно понял перенос строк?
Короче ... да, вы неправильно поняли перенос строк;)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
Итак, он работает только с командой l
:
l List out the current line in a ``visually unambiguous'' form.
l width
List out the current line in a ``visually unambiguous'' form,
breaking it at width characters. This is a GNU extension.
Если вы если вы хотите вывести три символа в строке, вы можете использовать это:
sed -nl 4 's/word1/word2/;l' output > output2
или это в GNU sed
:
sed -n 's/word1/word2/;l 4' output > output2
Обратите внимание, что завершающий обратный слеш (для выхода из разрыва строки) ) добавляется, если на самом деле новой строки нет (конец строки обозначается $
символами). Нам нужно использовать флаг -n
, потому что команда l
предназначена для просмотра, а не редактирования, как команда =
, и строка будет выглядеть как обычно после того, как l
выведет ее в запрошенной форме, если только подавлено -n
.
Вы можете получить больше, чем на самом деле, просто разбив файл после каждых трех символов:
sed 's/word1/word2/; s/.../&\n/g' output > output2
или разделить после, скажем, 10 символов:
sed -r 's/word1/word2/; s/.{10}/&\n/g' output > output2