正则表达式从字符串中提取数字

时间:2014-09-24 04:56:00

标签: regex bash sed

我想从字符串中提取数字。这是字符串

#all/30

我想要的只是30。我怎样才能提取? 我尝试使用:

echo "#all/30" | sed 's/.*\/([^0-9])\..*//'

但没有任何事情发生。 我该怎么写正则表达式? 抱歉英文不好。

4 个答案:

答案 0 :(得分:4)

您可以考虑使用grep从这样的简单字符串中提取数字。

echo "#all/30" | grep -o '[0-9]\+'
  • -o选项仅显示与模式匹配的匹配部分。

答案 1 :(得分:1)

你可以试试下面的sed命令,

$ echo "#all/30" | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/'
30
  • [^0-9]* [^...]是一个否定的字符类。它匹配任何字符,但不匹配否定字符类中的字符。 [^0-9]*匹配零个或多个非数字字符。
  • \([0-9]\+\)捕获一个或多个数字字符。
  • [^0-9]*匹配零个或多个非数字字符。
  • 将匹配的字符替换为组1中的字符将为您提供数字30

答案 2 :(得分:0)

echo "all/30" | sed 's/[^0-9]*\/\([0-9][0-9]*\)/\1/'

避免编写'。*',因为它会占用整个字符串。默认匹配始终为贪婪

答案 3 :(得分:0)

echo "all/30" | sed 's/[^0-9]*//g'
# OR
echo "all/30" | sed 's#.*/##'
# OR
echo "all/30" | sed 's#.*\([0-9]*\)#\1#'

没有关于可能的输入字符串的更多信息,我们只能假设结构是#all/后跟数字(仅)