Sed 捕获组不工作
Sed capture group not working
这似乎是 sed
捕获组的最简单示例之一,但它不起作用。我已经在在线正则表达式测试器中测试了正则表达式,并且做了我想要的。在 linux 命令行中它没有。
$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)//p'
$
和
$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)//p'
10 b 12
https://regex101.com/r/WS3lG9/1
我希望捕获“10”。
您的 sed
模式没有匹配完整的行,因为它在您的匹配后没有消耗剩余的字符串,即 a [0-9]+
。这就是您在输出中看到剩余文本的原因。
您可以使用:
echo "a 10 b 12" | sed -E -n 's/a ([0-9]+).*//p'
10
或者只是:
echo "a 10 b 12" | sed -E 's/a ([0-9]+).*//'
10
您可以使用 grep
来找出匹配项
,而不是用 sed
替换字符串
echo "a 10 b 12" | grep -Po '(?<=a )\d+'
这似乎是 sed
捕获组的最简单示例之一,但它不起作用。我已经在在线正则表达式测试器中测试了正则表达式,并且做了我想要的。在 linux 命令行中它没有。
$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)//p'
$
和
$ echo "a 10 b 12" | sed -E -n 's/a ([0-9]+)//p'
10 b 12
https://regex101.com/r/WS3lG9/1
我希望捕获“10”。
您的 sed
模式没有匹配完整的行,因为它在您的匹配后没有消耗剩余的字符串,即 a [0-9]+
。这就是您在输出中看到剩余文本的原因。
您可以使用:
echo "a 10 b 12" | sed -E -n 's/a ([0-9]+).*//p'
10
或者只是:
echo "a 10 b 12" | sed -E 's/a ([0-9]+).*//'
10
您可以使用 grep
来找出匹配项
sed
替换字符串
echo "a 10 b 12" | grep -Po '(?<=a )\d+'