2014-01-21 20 views
0

我如何可以grep只在什么正则表达式匹配的组相匹配?grep的:只显示什么正则表达式组

例如,得到:

some text ... <a href='...'/user/9082/>... </a> 

只有数字从/user/9082/

9082 

我已经试过:

echo "some text ... <a href='...'/user/9082/>3435435345345</a>" | grep -Eo "/user/([0-9]+)/" 
+0

可能的复制http://superuser.com/questions/11130/can-gnu-grep-output-a - 选择组 – dimo414

回答

2

使用sed

$ echo "some text ... <a href='...'/user/9082/>3435435345345</a>" | 
> sed -E 's|^.*/user/([0-9]+)/.*$|\1|' 
9082 

你说“我可以使用也sed等方法,”这意味着你知道sed是正确的工具,但你不想使用它。你能详细说明为什么吗? grep用于搜索,sed用于格式化。

0

使用grep

echo "some text ... <a href='...'/user/9082/>3435435345345</a>" | grep -o '\/user\/[0-9]\+\/' 
+1

这不是OP所要求的,他只想要数字,你的答案打印'/ user/9082 /'。 – dimo414

2

你可以使用一个bash正则表达式:中

str="some text ... <a href='...'/user/9082/>... </a>" 
re="/user/([0-9]+)/" 
[[ $str =~ $re ]] && echo ${BASH_REMATCH[1]}