【发布时间】:2014-02-05 15:01:56
【问题描述】:
我正在尝试替换(使用 sed)与正则表达式匹配的组,但我能从测试中得到的最好结果是替换 sed 分隔符右侧的整个字符串的字符串。
例子:
echo "this is a sample id='42' string" | sed -r "s/id='(.*?)'/\11/g"
输出:
this is a sample 421 string
期望的输出:
this is a sample id='1' string
这可能吗?怎么样?
编辑:
我要做的是实际替换 just 正则表达式匹配的组,而不是 sed 脚本左侧的整个字符串。 换句话说:我只想用 '1' 替换 '42' 而不使用 "id=''"。
【问题讨论】:
-
不清楚你的意思。你能用更多的例子改进解释吗?
-
@fedorqui 完成,请查看编辑
-
嗯,然后从我删除的答案中,这应该是 -->
echo "this is a sample id='42' string" | sed -r "s/'[^']*'/'5'/"。也就是说,只检查单引号之间的任何内容。 -
@fedorqui 不,您仍在使用
''和5。''不在我的组中 (id='(.*?)')。我只想替换(.*?)。 -
然后你可以捕捉它们并打印回来。请注意,当使用
sed s/sth/new/g时,sth将被替换为new,因此如果您在sth中有它,则必须在new中打印回来。因此,您可以使用sed -r "s/(')[^']*(')/\15\2/",尽管它看起来有点过分。