Я хочу разбить длинный текст, разделенный пробелами, через bash, но не получается. Приведенная ниже команда разбивается на символы, но не на разделители.
echo "The quick fox jumped over the lazy dog" | fold -w 10
echo "The quick fox jumped over the lazy dog" | sed -e 's/.\{9\}/&\n/g'
Было бы неплохо иметь его для взаимодействия пользователя с bash.
Синтаксис ввода
format_text 10 "The quick fox jumped over the lazy dog"
Вывод:
The quick
fox jumped
over the
lazy dog
Вы должны заметить, что третья строка отрезала бы букву "l" от "lazy", если бы не правило интервала.
Обновление: Текущий результат хороший. Есть некоторая проблема с рабочим слайсером, который я не могу решить самостоятельно: он не разбивает слова до того, как будет превышен лимит.
#!/bin/bash
printHeader () {
declare -i line_length=$3
# Upper and lower fences
local upper_command="print \"$1\" *"
local upper_fence="$(python -c "$upper_command $line_length")"
local lower_command="print \"$2\" *"
local lower_fence="$(python -c "$lower_command $line_length")"
# Slice words by some chracter counter
local regex_counter="s/(.{$line_length}) /\1\n/g"
# Complete line with dots and a pipe
local res="$line_length - length"
local repeat_pattern='$(repeat res \".\"; echo)'
local fill_command="{res=($res); printf \"%s%s|\n\", $0, $repeat_pattern}"
echo "$upper_fence"
sed -r "$regex_counter" <<< $4
echo "$lower_fence"
}
printHeader "#" "#" 10 "The quick fox jumped over the lazy dog"
Текущий вывод без окончательного токена:
##########
The quick fox
jumped over
the lazy dog
##########