我有string s=A8GCB5913L6
。我想在shell中分为三个部分。第一部分是最多4个连续数字的所有字母数字字符,第二部分是4个连续数字,而第三部分在4个连续数字之后保留。
上述字符串的示例:
A8GCB
5913
L6
我尝试过echo $s | grep -P '(?<!\d)\d{4}(?!\d)'
,但是我可以在字符串中标记4位数字,但是无法复制。
答案 0 :(得分:2)
使用bash:
[[ "$s" =~ ^([0-9A-Z]+)([0-9]{4})(.*) ]] && echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]} ${BASH_REMATCH[3]}"
输出:
A8GCB 5913 L6
答案 1 :(得分:0)
如果要分割字符串并打印片段,可以使用Perl,方法是:
#!/bin/bash
perl -ne '
if (/(^[A-Z0-9]+)(?<![0-9])([0-9]{4})([A-Z0-9]+)/) {
print "$1 $2 $3\n";
}
' infile
其中infile包含字符串:
A8GCB5913L6
CMOOTA5910M
AAGCC8257QU
A8GCB5913L6
A8GCB0951M
和输出结果:
A8GCB 5913 L6
CMOOTA 5910 M
AAGCC 8257 QU
A8GCB 5913 L6
A8GCB 0951 M
您可以参考$ 1,$ 2和$ 3进行后期处理。
希望这会有所帮助。
答案 2 :(得分:0)
使用Perl分割,分隔符为连续的4位数字,并保留分隔符。
将结果存储在bash数组中(称为pieces
)。
pieces=(`echo $s | perl -ne 'for $piece (split /([0-9]{4})/) { print "$piece " }'`)
现在您可以使用${pieces[0]}
,${pieces[1]}
,${pieces[2]}