如何从以零开头的字符串中提取数字

时间:2019-03-05 10:41:36

标签: regex shell awk sed

我有一个像这样的字符串SOMETHING00000076XYZ

如何使用 shell脚本从字符串中提取数字76请注意76前面是零,后面是字母。

7 个答案:

答案 0 :(得分:1)

第一个解决方案: :如果您对awk感到满意,请尝试执行以下操作。

echo "SOMETHING00000076XYZ" | awk 'match($0,/0+[0-9]+/){val=substr($0,RSTART,RLENGTH);sub(/0+/,"",val);print val;val=""}'

如果要将其保存到变量中,请使用以下命令。

variable="$(echo "SOMETHING00000076XYZ" | awk '{sub(/.*[^1-9]0+/,"");sub(/[a-zA-Z]+/,"")} 1')"

第二个解决方案: 在此处添加另外1个awk解决方案(请牢记示例)。

echo "SOMETHING00000076XYZ" | awk '{sub(/.*[^1-9]0+/,"");sub(/[a-zA-Z]+/,"")} 1'

答案 1 :(得分:1)

这是一个sed选项:

echo "SOMETHING00000076XYZ" | sed -r 's/[^0-9]*0*([0-9]+).*/\1/g';

76

以下是使用的正则表达式模式的说明:

[^0-9]*   match zero or more non digits
0*        match zero or more 0's
([0-9]+)  match AND capture any quantity of non zero digits
.*        match the remainder of the string

然后,我们只替换为\1,这是第一个(也是唯一的)捕获组。

答案 2 :(得分:1)

echo 'SOMETHING00000076XYZ' | grep -o '[1-9][0-9]*'

答案 3 :(得分:1)

您可以将(defn create-doors [doors contests] (repeatedly contests #(create-contest doors))) 用作

sed

  • 第一步是删除所有字母
  • 第二步是删除前导零

答案 4 :(得分:1)

使用gnu grep

grep -oP '0+\K\d+' <<< 'SOMETHING00000076XYZ'

76

\K重设所有匹配的信息。


这里是awk的另一个变体:

awk -F '0+' 'match($2, /^[0-9]+/){print substr($2, 1, RLENGTH)}' <<< 'SOMETHING00000076XYZ'

76

答案 5 :(得分:1)

您也可以尝试Perl

$ echo "SOMETHING00000076XYZ" | perl -ne ' /\D+0+(\d+)/ and print $1  '
76
$ a=$(echo "SOMETHING00000076XYZ" | perl -ne ' /\D+0+(\d+)/ and print $1  ')

$ echo $a
76

$

答案 6 :(得分:1)

$ echo 'SOMETHING00000076XYZ' | awk '{sub(/^[^0-9]+/,""); print $0+0}'
76