我有一个问题 - 我试图将存储为固定大小的变量拆分为5个字符,并在每个5.字母后面添加一个“%”,其中包含:
echo "$d" | sed 's/.\{5\}/&%/g'
如果$d
中存储的变量为HELLOWOLRD123
HELLO%WORLD%123
如何自动填写%%
,以便将固定大小保持为5?
所以我的输出是HELLO%WOLRD%123%%%
答案 0 :(得分:3)
如果perl
没问题
$ echo 'HELLOWOLRD123' | perl -pe 's/.{1,5}/$& . "%" x (6-length($&))/ge'
HELLO%WOLRD%123%%%
.{1,5}
贪婪匹配1到5个字符e
此修饰符允许我们在替换部分$&
匹配的字符串.
字符串连接"%" x (6-length($&))
此处x
是字符串重复运算符答案 1 :(得分:2)
一个在awk中:
$ echo HELLOWOLRD123 |
awk '{gsub(/.{1,5}/,"&%");while(length($0)%6)sub(/$/,"%")}1'
HELLO%WOLRD%123%%%
解释一下:
$ echo HELLOWOLRD123 |
awk '{
gsub(/.{1,5}/,"&%") # add % after every 5 chars
while(length($0)%6) # while length of string mod 6 is not 0
sub(/$/,"%") # add a & to it
}1'
HELLO%WOLRD%123%%%
答案 2 :(得分:1)
你去了:
echo $(echo -n "$d"; printf "%`echo $(((5 - (${#d} % 5)) % 5))`s" | tr ' ' '%') | sed 's/.\{5\}/&%/g'
编辑:
适用于Mac(不支持echo -n
)
echo $(printf "$d"; printf "%`echo $(((5 - (${#d} % 5)) % 5))`s" | tr ' ' '%') | sed 's/.\{5\}/&%/g'
答案 3 :(得分:1)
使用sed
echo 'HELLOWOLRD123' | sed -E '
s/(.{5})/&%/g
s/%...$/&%%%/
t
s/%..$/&%%%%/
t
s/%.$/&%%%%%/'
或循环
echo 'HELLOWOLRD123' | sed -E '
s/(.{5})/&%/g
/%$/b
:A
/%.{6}$/!{
s/$/#/
bA
}
:B
s/(.*%[^#]*)#(.*$)/\1%\2/
tB'