sedawk专家的问题。

如果我有这样的字符串: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/

    10-16 21:43