代码之家  ›  专栏  ›  技术社区  ›  Tom

在bash脚本中如何使用Perl regexp字符?

  •  0
  • Tom  · 技术社区  · 14 年前

    我想一个命令行函数,我可以在任何文件上运行,以改变 include("myinc.inc"); PHP语句到 include 'myfile.inc'; 我已经开始在我的报告中添加以下内容 ~/.bashrc 文件:

    function makestandard() {
        perl -p -i -e 's/include\("([\w\.]+)"\)/include '$1'/g' $*
    }
    

    source ~/.bashrc; 并在命令行中运行命令,如下所示:

    $ makestandard myfile.php
    

    我明白了 myfile.php文件 已修改,但不是捕获包含的文件名,而是将包含的文件名损坏为当前文件的名称。不知情的猜测,我认为 $1 变量正在干扰 perl regexp变量。

    我怎样才能解决这个问题?


    不需要阅读 ):我们已经开始使用 PHP_CodeSniffer (phpcs) makestandard bash函数有一堆 perl pie

    Shell环境:ubuntu10.04中开箱即用的东西。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Chas. Owens    14 年前

    它不是bash变量,而是单引号bash字符串中的单引号。

        2
  •  5
  •   Colin Hebert    14 年前

    应将简单引号转义并删除最后一个括号:

    perl -p -i -e "s/include\(\"([\w\.])+\"\)/include '\$1'/g" $*
    
        3
  •  0
  •   Spaceghost    14 年前

    include("something.php") 
    

    写的

    include 'something.php')
    

    也就是说,它会去掉左括号,用单引号替换双引号。。未按要求更改分机。

    以下内容似乎与OP预期的工作方式相同:

    function makestandard() {
        perl -p -i -e 's/include\("(\w+)\.inc"\)/include("$1.php")/g' $*
    }