我有一个像这样的字符串SOMETHING00000076XYZ
如何使用 shell脚本从字符串中提取数字76
? 请注意,76
前面是零,后面是字母。
答案 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