regex - Sed 捕获组不工作

标签 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”被捕获。

最佳答案

您的 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

关于regex - Sed 捕获组不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43987808/

相关文章:

javascript - 为什么 JSLint 在这行代码中返回 'bad escapement'?

Python 正则表达式为最后一个匹配的字符返回额外的捕获组

sql - 验证 SQL Server 中表中的字符串 - CLR 函数或 T-SQL(已更新问题)

python - 需要正则表达式 :(

bash - 如何使用 GNU 并行

linux - 在 shell -n 中回显没有打印正确的东西

linux - bash 脚本来定位变量并替换下面几行引号之间的字符串

linux - bash,仅删除行首的一半空格

sed - 使用 sed 查找并追加多行多个文件?

linux - 当定界符也出现在文件中任何位置的字段数据中时,如何替换定界符?