опция sed -l для переноса строк не работает

sed -e 's/word1/word2/' -l 3 output > output2

Я тестирую эту команду. Я ожидал 3 символа для каждой строки. Но это не работает. output2 имеет те же разрывы строк, что и output. Я неправильно понял перенос строк?

2
задан 14 December 2017 в 16:17

1 ответ

Короче ... да, вы неправильно поняли перенос строк;)

-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
8
ответ дан 14 December 2017 в 16:17

Другие вопросы по тегам:

Похожие вопросы: