代码之家  ›  专栏  ›  技术社区  ›  american-ninja-warrior

Perl-pi-e不能用星号代替行-也许我没有正确地转义

  •  0
  • american-ninja-warrior  · 技术社区  · 6 年前

    SO 没有成功。我做错了什么:

     * It is generally better to create a new file per style scope.
     *
     *= require_tree .
     *= require_self
    

    我希望在执行perl pie之后,文件最终看起来像这样

     * It is generally better to create a new file per style scope.
     *
     *= require iziToast
     *= require_tree .
     *= require_self
    

      828  perl -pi -e 's/  *= require_tree ./  *= Require_tree ./' app/assets/stylesheets/application.css.scss
      832  perl -pi -e 's/require_tree \./Require_tree \./' app/assets/stylesheets/application.css.scss
      837  perl -pi -e 's/  \*\= require_tree \./  \*\= Require_tree \./' app/assets/stylesheets/application.css.scss
      839  perl -pi -e 's/= require_tree \./= Require_tree \./'       864  perl -pi -e 's/\*/\Q*/' app/assets/stylesheets/application.css.scss
      868  perl -pi -e 's/\*/\Q*/' app/assets/stylesheets/application.css.scss
      874  perl -pi -e 's/\*/*/' app/assets/stylesheets/application.css.scss
      876  perl -pi -e 's/\*/\*/' app/assets/stylesheets/application.css.scss
      878  perl -pi -e 's/\*/s/' app/assets/stylesheets/application.css.scss
      898  git checkout app/; perl -pi -e 's/\(\*\)/$1/' app/assets/stylesheets/application.css.scss; git diff
      900  git checkout app/; perl -pi -e 's/(*)/$1/' app/assets/stylesheets/application.css.scss; git diff
      901  git checkout app/; perl -pi -e 's/(\*)/$1/' app/assets/stylesheets/application.css.scss; git diff
      903  git checkout app/; perl -pi -e 's/(\\*)/$1/' app/assets/stylesheets/application.css.scss; git diff
      905  git checkout app/; perl -pi -e 's/\(\*\)/$1/' app/assets/stylesheets/application.css.scss; git diff
      907  git checkout app/; perl -pi -e 's/^(.*)/foo/' app/assets/stylesheets/application.css.scss; git diff
      908  git checkout app/; perl -pi -e 's/^  (.*)/foo/' app/assets/stylesheets/application.css.scss; git diff
      924  git checkout app/; perl -pi -e 's/^(.*)/\1/' app/assets/stylesheets/application.css.scss; git diff
      925  git checkout app/; perl -pi -e 's/^(.*)/\\1/' app/assets/stylesheets/application.css.scss; git diff
    

    系统:Mac10.13.5、Bash3.2、Perl5.18


    因为问题标题提到perl,所以需要一个perl答案。

    2 回复  |  直到 6 年前
        1
  •  3
  •   ikegami Gilles Quénot    6 年前

    * . 在正则表达式模式中是特殊的。你必须使用 \* \. * .

    perl -i -pe'print " *= require iziToast\n" if /^ \*= require_tree \.$/' file
    

    perl -i -pe's/^(?= \*= require_tree \.$)/ *= require iziToast\n/' file
    
        2
  •  0
  •   chepner    6 年前

    sed .

    $ sed '3i\
    > \ *= require iziToast
    > ' tmp.txt
     * It is generally better to create a new file per style scope.
     *
     *= require iziToast
     *= require_tree .
     *= require_self