我想从字符串中提取数字。这是字符串正则表达式从字符串中提取数字
#all/30
我想要的全部是30
。我如何提取? 我尝试使用:
echo "#all/30" | sed 's/.*\/([^0-9])\..*//'
但是什么也没有发生。 我应该如何写正则表达式? 对不起,英语不好。
我想从字符串中提取数字。这是字符串正则表达式从字符串中提取数字
#all/30
我想要的全部是30
。我如何提取? 我尝试使用:
echo "#all/30" | sed 's/.*\/([^0-9])\..*//'
但是什么也没有发生。 我应该如何写正则表达式? 对不起,英语不好。
你可以试试下面的sed命令,
$ echo "#all/30" | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/'
30
[^0-9]*
[^...]
是一个否定的字符类。它匹配任何字符,但不匹配否定字符类中的字符。 [^0-9]*
匹配零个或多个非数字字符。\([0-9]\+\)
捕获一个或多个数字字符。[^0-9]*
匹配零个或多个非数字字符。30
。
echo "#all/30" | grep -o '[0-9]\+'
-o
选项仅示出与该模式匹配的匹配部分。+1,用于简单,便携和高效的答案。 – 2014-09-24 05:07:55
谢谢你的意见爵士:) – 2014-09-24 05:12:19
@AvinashRaj两个答案给我什么,我需要先生。我只需要'30'输出。 – 2014-09-24 05:39:46
echo "all/30" | sed 's/[^0-9]*\/\([0-9][0-9]*\)/\1/'
避免写 '*',因为它消耗整个字符串。默认匹配总是贪婪。
'echo“all/30”| sed's#[^ 0-9] */\([0-9] \ {1,\} \)#\ 1#'' – NeronLeVelu 2014-09-24 05:50:40
echo "all/30" | sed 's/[^0-9]*//g'
# OR
echo "all/30" | sed 's#.*/##'
# OR
echo "all/30" | sed 's#.*\([0-9]*\)#\1#'
没有关于可能的输入字符串的详细信息,我们只能假设,结构#all/
随后数(只)
最后,它的工作原理。我从来没有想过它应该是一个长码正则表达式。顺便说一句,非常感谢主席先生。 – 2014-09-24 05:03:45