我正在尝试替换(使用sed)与正则表达式匹配的组,但我能从测试中得到的最好的是一个字符串,它替换了sed分隔符右侧的整个字符串.
例:
echo "this is a sample id='42' string" | sed -r "s/id='(.*?)'/\11/g"
Run Code Online (Sandbox Code Playgroud)
输出:
this is a sample 421 string
Run Code Online (Sandbox Code Playgroud)
期望的输出:
this is a sample id='1' string
Run Code Online (Sandbox Code Playgroud)
这可能吗?怎么样?
编辑:
我要做的是实际上只替换正则表达式匹配的组,而不是sed脚本左侧的整个字符串.换句话说:我想在不使用"id =''"的情况下将'42'替换为'1'.
也许是这样的?
$ echo "this is a sample id='42' string" | sed -r "s/id='.*?'/id='1'/g"
Run Code Online (Sandbox Code Playgroud)
结果:
这是一个示例id ='1'字符串
或者你可以这样做:
$ echo "this is a sample id='42' string" | sed -r "s/(id=')(.*?)(')/\11\3/g"
this is a sample id='1' string
Run Code Online (Sandbox Code Playgroud)
结果:
这是一个示例id ='1'字符串
在 中sed
,整个左正则表达式被整个右正则表达式替换。如果您想保留左侧正则表达式的一部分,则必须将其显式复制到右侧或将其也设为捕获组:
echo "this is a sample id='42' string" | sed -r "s/id='(.*?)'/\11/g"
Run Code Online (Sandbox Code Playgroud)
将正确替换所有匹配项 , id='42'
,421
因为\1
is 42
。如果您想保留显示 的部分id=...
,则必须将其放入替换中:
echo "this is a sample id='42' string" | sed -r "s/id='(.*?)'/id='1'/g"
Run Code Online (Sandbox Code Playgroud)