我有一根很大的线,比如
ABCDEFGHIJKLM...我想用这种方式把它分成长度为5的子串:
>1
ABCDE
>2
BCDEF
>3
CDEFG
[...]发布于 2011-09-27 19:15:12
${string:position:length}
从位于$position的$string中提取子串的$length字符。
stringZ=abcABC123ABCabc # 0123456789.....基于#0的索引。echo ${stringZ:0} # abcABC123ABCabc echo ${stringZ:1} # bcABC123ABCabc echo ${stringZ:7} # 23ABCabc echo ${stringZ:7:3} # 23A #三个字符的子串。
--来自Mendel Cooper的《高级Bash脚本指南》中的
然后使用循环遍历并在位置上加1,以提取每个长度为5的子串。
end=$(( ${#stringZ} - 5 ))
for i in $(seq 0 $end); do
echo ${stringZ:$i:5}
done发布于 2011-09-27 19:56:35
sed可以在一次操作中完成:
$ echo "abcdefghijklmnopqr"|sed -r 's/(.{5})/\1 /g'
abcde fghij klmno pqr或
取决于您的需求:
$ echo "abcdefghijklmnopqr"|sed -r 's/(.{5})/\1\n/g'
abcde
fghij
klmno
pqr更新
我认为这只是一个简单的字符串分裂问题,没有仔细阅读问题。现在,它应该提供您需要的内容:
仍然只有一次机会,但这次使用awk:
$ echo "abcdefghijklmnopqr"|awk '{while(length($0)>=5){print substr($0,1,5);gsub(/^./,"")}}'
abcde
bcdef
cdefg
defgh
efghi
fghij
ghijk
hijkl
ijklm
jklmn
klmno
lmnop
mnopq
nopqr发布于 2018-11-08 06:02:33
fold -w5应该可以做到这一点。
$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | fold -w5
ABCDE
FGHIJ
KLMNO
PQRST
UVWXY
Z干杯!
https://stackoverflow.com/questions/7568112
复制相似问题