给sed
和awk
专家的问题。
如果我有这样的字符串:ABCDEF00012300XYZ
。
我想提取字母和零后面的数字。因此,我想从字符串中提取12300
。
精神上,我只想提取字符串中的有效数字。 00012300
在数学意义上表示12300
。
我尝试了以下
STR=ABCDEF00012300XYZ
VALID_NUMBER="$(echo $STR | awk '{sub(/.*0+/,"");sub(/[a-zA-Z]+/,"")} 1')"
如果我通过
ABCDEF000123XYZ
并从123
提取STR
,则上述方法有效。但是如果123
后跟零,则失败,在这种情况下,它应该得到12300
。请注意,这是我正在使用的linux上的
sed
最佳答案
您可以使用sed
:
VALID_NUMBER="$(sed 's/^[A-Z0]*\([0-9]*\).*/\1/' <<< "$STR")"
看到一个online
sed
demo。^[A-Z0]*\([0-9]*\).*
模式将匹配:^
-一行[A-Z0]*
-任何大写字母或零,0个或多个重复\([0-9]*\)
-这会将0个或多个数字捕获到组1 .*
-这将与该行的其余部分匹配。 然后,替换模式中的
\1
将仅在输出中保留您需要的数字。关于shell - 如何从字符串中提取有效数字,即使其后跟零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55023994/