sed -r 's/([^ .]+ [^ .]+) /\1\n/g' <<< "Быстрая лиса перепрыгнула через ленивую собаку"
быстрый
лиса прыгнула
над
Лентяй
Набор символов [^ .]+
означает один или несколько +
персонажи любого типа .
исключая ^
пробелы. Итак, группа захвата ([^ .]+ [^ .]+)
соответствует шаблонам как строка строка
. Все регулярное выражение имеет дополнительный пробел в конце ([^ .]+ [^ .]+)
(можно было включить в группу захвата, чтобы сохранить).
С сед
с помощью замены с
командой мы заменяем совпадающий шаблон содержимым первой группы захвата \1
и новый символ строки \n
вместо пробела. Под флагом г
повторяем команду до конца каждой строки. -р
опция активирует расширенные регулярные выражения.
Обновление - это фактический ответ:
sed -r 's/(.{8}) /\1\n/g' <<< "Откуда мы знаем, что он будет соответствовать предварительно определенному количеству символов?"
Как мы
знаю, что это
собираюсь
соответствовать
предопределенный
количество
символы?
В этом примере мы захватываем строки длиной не менее 8 символов (включая пробелы), за которыми следует пробел.
Мы можем проверить фактическую длину выходных строк следующим образом:
sed -r 's/(.{8}) /\1\n/g' <<< "Откуда мы знаем, что он будет соответствовать предварительно определенному количеству символов?" \
| awk '{длина печати}'
9
10
8
9
11
9
11
И с помощью ответов на вопрос Как использовать printf для печати символа несколько раз? [ага] мы можем добиться желаемого результата.
sed -r 's/(.{8}) /\1\n/g' <<< "Откуда мы знаем, что он будет соответствовать предварительно определенному количеству символов?" \
| awk '{остальное=(12 - длина); printf "%s%s|\n", $0, substr(".........", 1, остальное)}'
Как мы...|
знаю, что это .. |
собираюсь....|
соответствовать...|
предопределено.|
количество...|
символы?.|
Если вы хотите разбить слова, удалите последний пробел из приведенного выше регулярного выражения. /(.{8})/
. Вот пример, где максимальная длина строки будет ровно 10 символов или меньше, где второй сед
команда будет обрезать пробелы вокруг каждой новой строки.
sed -r 's/(.{10})/\1\n/g' <<< "Откуда мы знаем, что он будет соответствовать предварительно определенному количеству символов?" \
| sed -r 's/(^ | $)//g' \
| awk '{остальное=(10 - длина); printf "%s%s|\n", $0, substr(".........", 1, остальное)}'
Как мы.|
знаю, что это |
собираюсь..|
соответствовать.|
предварительно определить |
d число о |
f персонаж|
р?.......|