我正在尝试替换配置文件中的一行。问题是我只想替换一次出现。部分文件看起来像这样。它是gitolite默认配置文件:
# -----------------------------------------------------------------
# suggested locations for site-local gitolite code (see cust.html)
# this one is managed directly on the server
# LOCAL_CODE => "$ENV{HOME}/local",
# or you can use this, which lets you put everything in a subdirectory
# called "local" in your gitolite-admin repo. For a SECURITY WARNING
# on this, see http://gitolite.com/gitolite/cust.html#pushcode
# LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local",
# ------------------------------------------------------------------
我想从命令行将LOCAL_CODE
设置为其他内容。我以为我可以在perl中做到这一点以获得pcre的便利性。我是perl的新手,但无法让它工作。
我发现了这个:
perl -i.bak -p -e’s/old/new/’ filename
问题是-p似乎让它逐行循环遍历文件,因此'o'修饰符不会产生任何影响。但是没有-p选项它似乎不起作用......
答案 0 :(得分:4)
执行此操作的紧凑方法是
perl -i -pe '$done ||= s/old/new/' filename
答案 1 :(得分:3)
又一个单行:
perl -i.bak -p -e '$i = s/old/new/ if !$i' filename
答案 2 :(得分:2)
可能有大量的perl一个衬里可以做到这一点,但这里有一个。
perl -i.bak -p -e '$x++ if $x==0 && s/old/new/;' filename