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

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

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

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

3 ответа

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

-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

Обратите внимание, что обратная косая черта назад escape break) добавляется, если на самом деле нет новой строки (конец строки обозначается символами $). Нам нужно использовать флаг -n, потому что команда l предназначена для просмотра, а не для редактирования, например, для команды =, и строка появится как обычно после того, как l выведет ее в запрошенной форме, если только

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

sed 's/word1/word2/; s/.../&\n/g' output > output2

или разделить, скажем, 10 символы:

sed -r 's/word1/word2/; s/.{10}/&\n/g' output > output2
8
ответ дан 22 May 2018 в 17:00
  • 1
    Спасибо за подробный ответ. После прочтения документации и вашего ответа я задаюсь вопросом, почему я не выводил комбинацию команд, как вы. Я думаю, причина в том, что у меня нет базовых знаний для создания сценариев. Я могу догадаться, что это означает 's / word1 / word2 /; l', но я не хочу полагаться на догадки. Я хочу быть точным. Что мне делать, чтобы разбираться в сценариях, подобных этому примеру? – Smile 14 December 2017 в 17:52
  • 2
    @Smile, просто продолжайте практиковать :) Вот ресурс Мне нравится на sed с примерами. – Zanna 14 December 2017 в 17:55
  • 3
    Я читаю gnu.org/software/sed/manual/sed.html#Introduction . После этого я прочитаю предоставленный вами ресурс. Это слишком много? – Smile 14 December 2017 в 18:06
  • 4
    @Smile просто остановитесь, когда вам стало скучно :) – Zanna 14 December 2017 в 18:20

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

-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

Обратите внимание, что обратная косая черта назад escape break) добавляется, если на самом деле нет новой строки (конец строки обозначается символами $). Нам нужно использовать флаг -n, потому что команда l предназначена для просмотра, а не для редактирования, например, для команды =, и строка появится как обычно после того, как l выведет ее в запрошенной форме, если только

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

sed 's/word1/word2/; s/.../&\n/g' output > output2

или разделить, скажем, 10 символы:

sed -r 's/word1/word2/; s/.{10}/&\n/g' output > output2
8
ответ дан 18 July 2018 в 01:12

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

-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

Обратите внимание, что обратная косая черта назад escape break) добавляется, если на самом деле нет новой строки (конец строки обозначается символами $). Нам нужно использовать флаг -n, потому что команда l предназначена для просмотра, а не для редактирования, например, для команды =, и строка появится как обычно после того, как l выведет ее в запрошенной форме, если только

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

sed 's/word1/word2/; s/.../&\n/g' output > output2

или разделить, скажем, 10 символы:

sed -r 's/word1/word2/; s/.{10}/&\n/g' output > output2
8
ответ дан 24 July 2018 в 17:21

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

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