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)