Sed捕获组无法正常工作

aba*_*ter 1 regex bash sed regex-group

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

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

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

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

我希望能抓住"10".

anu*_*ava 6

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

您可以使用:

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

要不就:

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

  • @abalter规则是 - 当你需要它时,当你不需要它时,不要这样做.在这种情况下,您希望sed用数字"10"替换整行,因此,当然,您需要编写与整行匹配的正则表达式.`a([0-9] +)`不匹配整行`a 10 b 12`它只匹配`a 10`,而正则表达式'a([0-9] +).*`匹配全线. (3认同)