如果我这样做
perl -i -slpe 's/$wgDBserver = "\K.*?"/$ip"/' -- -ip=$IP test
然后我必须在替换方面添加"
,因为我在匹配方面.*?"
,因此会丢失"
,因此必须再次替换它。
问题
是否可以不再添加"
我的自我?
这是我的测试用例:
$ IP="123.456.78.9" && \
echo -n '\n\n$wgDBserver = "172.17.0.3";\naaa "123"\n\n\n' > test && \
perl -i -slpe 's/$wgDBserver = "\K.*?"/$ip"/' -- -ip=$IP test && \
cat test
$wgDBserver = "123.456.78.9";
aaa "123"
答案 0 :(得分:3)
您应该在perlre
中查看“Look-Around Assertions”。
使用正向前瞻(?=)
:
(?=pattern)
:零宽度正向前瞻断言。例如,/\w+(?=\t)/
匹配单词后跟标签,但不包括$&
中的标签。
"\K.*?(?=")
因此,此处尾随"
将匹配,但不会在$&
中捕获。