Sed捕获组无法正常工作

时间:2017-05-15 19:58:46

标签: regex bash sed regex-group

这似乎是sed捕获组的最简单的可能示例之一,并且它不起作用。我已经在在线正则表达式测试中测试了正则表达式,并且做了我想要的。在linux命令行中它没有。

$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)/\1/p'
$

$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)/\1/p'
10 b 12

https://regex101.com/r/WS3lG9/1

我希望" 10"被捕获。

2 个答案:

答案 0 :(得分:6)

您的sed模式与完整行不匹配,因为匹配后不会消耗剩余的字符串,即a [0-9]+。这就是你在输出中看到剩余文本的原因。

您可以使用:

echo "a 10 b 12" | sed -E -n 's/a ([0-9]+).*/\1/p'
10

或者只是:

echo "a 10 b 12" | sed -E 's/a ([0-9]+).*/\1/'
10

答案 1 :(得分:1)

您可以使用sed取消匹配,而不是使用grep替换字符串

echo "a 10 b 12" | grep -Po '(?<=a )\d+'