根据其中的4个连续数字分割字符串

时间:2018-08-31 05:22:52

标签: string bash shell

我有string s=A8GCB5913L6。我想在shell中分为三个部分。第一部分是最多4个连续数字的所有字母数字字符,第二部分是4个连续数字,而第三部分在4个连续数字之后保留。

上述字符串的示例:

  1. A8GCB
  2. 5913
  3. L6

我尝试过echo $s | grep -P '(?<!\d)\d{4}(?!\d)',但是我可以在字符串中标记4位数字,但是无法复制。

3 个答案:

答案 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]}

访问作品了