作者:fionafongkaian | 来源:互联网 | 2022-12-04 16:26
特定 "ABCDEFGHIJKLMOPQRSTUVWXY"
如何实现这一结果? "ABCDE-FGHIJ-KLMNO-PQRST-UVWXY"
1> Tom Fenech..:
使用sed,您可以通过首先-
在每5个字符后添加一个,然后删除该行末尾-
的尾部来执行此操作:
$ sed -E 's/.{5}/&-/g; s/-$//' <<<"ABCDEFGHIJKLMNOPQRSTUVWXY"
ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
在扩展(-E
)模式下:
.{5}
匹配任意5个字符
&-
替换为整场比赛(5个字符)加 -
然后第二个替换命令-
在line($
)的末尾匹配并替换为nothing.
使用GNU awk,一个选项是用于FPAT
定义将行解释为一系列字段的方式,然后-
在每个字段之间添加:
$ awk -v FPAT='.{5}' -v OFS='-' '{ $1 = $1 } 1' <<<"ABCDEFGHIJKLMNOPQRSTUVWXY"
ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
字段模式FPAT
定义为任意5个字符,输出字段分隔符OFS
定义为-
.$1 = $1
"触及"每一行,导致它被重新格式化(没有这部分,什么都不会发生).1
是导致每行打印的最短真实条件.
在bash中执行此操作并不困难:
#!/bin/bash
input="ABCDEFGHIJKLMNOPQRSTUVWXY"
parts=()
# build an array from slices of length 5
for (( i = 0; i <${#input}; i += 5 )) do
parts+=( "${input:i:5}" )
done
# join the array on IFS (use a subshell to avoid modifying IFS for rest of script)
( IFS=-; echo "${parts[*]}" )