这里是一个可以帮助你(在bash)的函数:
print_padded() {
local header=$1
local msg=($2)
local width=$3
local headerlength=${#header}
local i=0
local spaceleft=$((width-headerlength))
local defaultspace=20
(((spaceleft<0) && (spaceleft=defaultspace)))
local buf=()
local s
printf "%s" "$header"
while ((i<${#msg[@]})); do
if ((${#msg[i]}+1<=spaceleft)); then
printf " %s" "${msg[i]}"
((spaceleft-=${#msg[i++]}+1))
else
echo
(((spaceleft=width-headerlength)<0 && (spaceleft=defaultspace)))
while ((${#msg[i]}>=spaceleft)); do
(((s=width-${#msg[i]})<0 && (s=0)))
printf "%${s}s%s\n" '' "${msg[i++]}"
done
printf "%${headerlength}s" ''
fi
done
echo
}
然后为使用,例如,
$ # Demo with 40 columns...
$ msg="Writing a log file entry that is wrapped onto the next line with appropriate formatting..."
$ print_padded "[[email protected]:56:43 test.sh] ->" "$msg" 40
[[email protected]:56:43 test.sh] -> Writing
a log
file
entry
that is
wrapped
onto
the
next
line
with
appropriate
formatting...
$ # Demo with 60 columns:
$ loremipsum="Lorem ipsum dolor sit amet, consectetur adipiscing \
elit. Duis erat purus, vestibulum non sollicitudin ornare, aliquam \
nec mi. In vulputate velit ut felis porta tincidunt. Integer odio \
odio, ullamcorper id ultricies a, fermentum vitae augue. \
Nunc sapien ipsum, dignissim sit amet eleifend eu, suscipit sed eros. \
In hac habitasse platea dictumst. Morbi feugiat interdum ligula \
eu consectetur. Sed congue lacinia felis, a adipiscing nibh \
aliquam in. Vestibulum ante ipsum primis in faucibus orci luctus \
et ultrices posuere cubilia Curae; Proin faucibus ultrices tincidunt."
$ print_padded "loremipsum ->" "$loremipsum" 60
loremipsum -> Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Duis erat purus, vestibulum
non sollicitudin ornare, aliquam nec mi. In
vulputate velit ut felis porta tincidunt.
Integer odio odio, ullamcorper id ultricies a,
fermentum vitae augue. Nunc sapien ipsum,
dignissim sit amet eleifend eu, suscipit sed
eros. In hac habitasse platea dictumst. Morbi
feugiat interdum ligula eu consectetur. Sed
congue lacinia felis, a adipiscing nibh
aliquam in. Vestibulum ante ipsum primis in
faucibus orci luctus et ultrices posuere
cubilia Curae; Proin faucibus ultrices
tincidunt.
现在我希望你不会有任何格式的垃圾在你的信息中(例如颜色代码等),否则这个脚本将失败。
它与单词(在空格处)断行。正如你将在第一个输出中看到的那样,如果一条线太长而不适合,它将被放置在它自己的一条线上(如果可能)。
如果你不关心的话中途切断它更容易:
print_padded() {
local header=$1
local msg=$2
local width=$3
local headerlength=${#header}
local i
local msgspace=$((width-headerlength))
(((msgspace<0) && (msgspace=20)))
printf "%s %s\n" "$header" "${msg:$i:$msgspace}"
for ((i=msgspace;i<${#msg};i+=msgspace)); do
printf "%${headerlength}s %s\n" '' "${msg:$i:$msgspace}"
done
}
然后:
$ # Demo with 40 columns...
$ msg="Writing a log file entry that is wrapped onto the next line with appropriate formatting..."
$ print_padded "[[email protected]:56:43 test.sh] ->" "$msg" 40
[[email protected]:56:43 test.sh] -> Writing
a log fi
le entry
that is
wrapped
onto th
e next l
ine with
appropr
iate for
matting.
$ # Demo with 60 columns:
$ loremipsum="Lorem ipsum dolor sit amet, consectetur adipiscing \
elit. Duis erat purus, vestibulum non sollicitudin ornare, aliquam \
nec mi. In vulputate velit ut felis porta tincidunt. Integer odio \
odio, ullamcorper id ultricies a, fermentum vitae augue. \
Nunc sapien ipsum, dignissim sit amet eleifend eu, suscipit sed eros. \
In hac habitasse platea dictumst. Morbi feugiat interdum ligula \
eu consectetur. Sed congue lacinia felis, a adipiscing nibh \
aliquam in. Vestibulum ante ipsum primis in faucibus orci luctus \
et ultrices posuere cubilia Curae; Proin faucibus ultrices tincidunt."
$ print_padded "loremipsum ->" "$loremipsum" 60
loremipsum -> Lorem ipsum dolor sit amet, consectetur adipisc
ing elit. Duis erat purus, vestibulum non solli
citudin ornare, aliquam nec mi. In vulputate ve
lit ut felis porta tincidunt. Integer odio odio
, ullamcorper id ultricies a, fermentum vitae a
ugue. Nunc sapien ipsum, dignissim sit amet ele
ifend eu, suscipit sed eros. In hac habitasse p
latea dictumst. Morbi feugiat interdum ligula e
u consectetur. Sed congue lacinia felis, a adip
iscing nibh aliquam in. Vestibulum ante ipsum p
rimis in faucibus orci luctus et ultrices posue
re cubilia Curae; Proin faucibus ultrices tinci
dunt.
希望这有助于!
你最好用你的输入和你的期望输出的例子,而不是只说你做了什么 – Rubens
更新问题... –
'man printf'。祝你好运。 – shellter