Grep:仅显示正则表达式组中匹配的内容

时间:2014-01-21 17:17:54

标签: linux bash 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]+)/"

3 个答案:

答案 0 :(得分:2)

使用sed

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

您说“我也可以使用sed和其他方法”暗示您知道sed是正确的工具,但您不想使用它。你能详细说明原因吗? grep用于搜索,sed用于格式化。

答案 1 :(得分:2)

您可以使用bash正则表达式:

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

答案 2 :(得分:1)

使用grep

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