命令行中的 Perl:在文件中只替换正则表达式一次

3 regex perl

我正在尝试替换配置文件中的一行。问题是我只想替换一次出现。文件的一部分看起来像这样。这是 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",

# ------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想设置 LOCAL_CODE从命令行为其他内容。我想我可能会在 perl 中做到这一点以获得 pcre 的便利。虽然我是 perl 的新手,但无法使其正常工作。

我找到了这个:

perl -i.bak -p -e’s/old/new/’ filename
Run Code Online (Sandbox Code Playgroud)

问题是 -p 似乎让它逐行循环遍历文件,因此 'o' 修饰符不会产生任何效果。但是,如果没有 -p 选项,它似乎不起作用......

use*_*058 6

一种紧凑的方法是

perl -i -pe '$done ||= s/old/new/' filename
Run Code Online (Sandbox Code Playgroud)