关于在配置中交换键/值对的值,并想知道如果在backrefs可以有不同的索引时如何在sed中完成此操作:
$ echo "#foo=bar" | sed "s|^\(#\)\(foo=\)\(.*\)|\2new_bar|g"
foo=new_bar
精细。但是,可能是,评论标志不存在,所以第一组(#)不在那里。 - 然后\ 2实际上是\ 1。
$ echo "foo=bar" | sed "s|^\(#\)\(foo=\)\(.*\)|\2new_bar|g"
foo=bar
sed应该以{{1}}替换bar
。如何使用sed确定正确的backref编号,或者是否可以定义一个可选字段,否则可以使用组?
修改
实际上,我对第二种情况的描述是错误的,因为正则表达式不匹配,因为new_bar
根本不在搜索字符串中。所以没有后向引用可以匹配。我错过了#
的量词\?
,无论该符号是否存在,它都会向实际群组产生。感谢@ruak指出这一点。
答案 0 :(得分:1)
这有帮助吗?
sed "s|^\(#\?\)\(foo=\)\(.*\)|\2new_bar|g"
用你的字符串:
kent$ echo "#foo=bar" | sed "s|^\(#\?\)\(foo=\)\(.*\)|\2new_bar|g"
foo=new_bar
kent$ echo "foo=bar" | sed "s|^\(#\?\)\(foo=\)\(.*\)|\2new_bar|g"
foo=new_bar