2014-09-24 198 views
0

我想从字符串中提取数字。这是字符串正则表达式从字符串中提取数字

#all/30 

我想要的全部是30。我如何提取? 我尝试使用:

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

但是什么也没有发生。 我应该如何写正则表达式? 对不起,英语不好。

回答

1

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

$ echo "#all/30" | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/' 
30 
  • [^0-9]*[^...]是一个否定的字符类。它匹配任何字符,但不匹配否定字符类中的字符。 [^0-9]*匹配零个或多个非数字字符。
  • \([0-9]\+\)捕获一个或多个数字字符。
  • [^0-9]*匹配零个或多个非数字字符。
  • 更换里面组1的字符匹配的字符会给你你可以考虑使用grep来从一个简单的字符串这样提取的数字数30
+0

最后,它的工作原理。我从来没有想过它应该是一个长码正则表达式。顺便说一句,非常感谢主席先生。 – 2014-09-24 05:03:45

4

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

+1,用于简单,便携和高效的答案。 – 2014-09-24 05:07:55

+0

谢谢你的意见爵士:) – 2014-09-24 05:12:19

+0

@AvinashRaj两个答案给我什么,我需要先生。我只需要'30'输出。 – 2014-09-24 05:39:46

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

避免写 '*',因为它消耗整个字符串。默认匹配总是贪婪

+0

'echo“all/30”| sed's#[^ 0-9] */\([0-9] \ {1,\} \)#\ 1#'' – NeronLeVelu 2014-09-24 05:50:40

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/随后数(只)