将大字符串拆分为子字符串

did*_*mos 12 string bash shell

我有一个巨大的字符串:

ABCDEFGHIJKLM ...

我想以这种方式将其拆分为长度为5的子串:

> 1
ABCDE
> 2
BCDEF
> 3
CDEFG

[...]

UPDATE

解决方案:
好的,多亏你们,我能够找到快速做到这一点的方法!这是我的解决方案,结合了这里的一些想法:

str ="ABCDEFGHIJKLMNOP"
splitfive(){echo $ 1 | cut -c $ 2- | sed -r's /(.{5})/\1 \n/g'; }
为(第(i = 0; I <= 5;我++)); splitfive"$ str"$ i; 完成| grep -v"^ $"

cho*_*own 20

${string:position:length}
Run Code Online (Sandbox Code Playgroud)

从$ position的$ string中提取子字符串的$ length字符.

stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.

echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc

echo ${stringZ:0:5}                          # abcAB
                                             # Five characters of substring.
Run Code Online (Sandbox Code Playgroud)

然后使用循环遍历并向该位置添加1以提取长度为5的每个子字符串.

for i in seq 0 ${#stringZ}; do
    echo ${stringZ:$i:5}
done
Run Code Online (Sandbox Code Playgroud)

全部来自Bash字符串操作


Zac*_*ack 14

fold -w5 应该做的伎俩。

$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | fold -w5
ABCDE
FGHIJ
KLMNO
PQRST
UVWXY
Z
Run Code Online (Sandbox Code Playgroud)

干杯!


Ken*_*ent 10

sed可以一次性完成:

kent$  echo "abcdefghijklmnopqr"|sed -r 's/(.{5})/\1 /g'
abcde fghij klmno pqr
Run Code Online (Sandbox Code Playgroud)

要么

取决于您的需求:

kent$  echo "abcdefghijklmnopqr"|sed -r 's/(.{5})/\1\n/g' 
abcde
fghij
klmno
pqr
Run Code Online (Sandbox Code Playgroud)

更新

我以为这只是简单的分裂字符串问题,没有仔细阅读问题.现在它应该给你需要的东西:

还是一枪,但这次有awk:

kent$  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
Run Code Online (Sandbox Code Playgroud)