我想从字符串中提取数字。这是字符串
#all/30
我想要的只是30
。我怎样才能提取?
我尝试使用:
echo "#all/30" | sed 's/.*\/([^0-9])\..*//'
但没有任何事情发生。 我该怎么写正则表达式? 抱歉英文不好。
答案 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]*
匹配零个或多个非数字字符。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/
后跟数字(仅)