Bash Awk:了解如何在php中删除注释

Bash Awk:了解如何在php中删除注释,bash,awk,Bash,Awk,为一个相当简单的问题提前道歉 在一大堆“自我注释”中,我有一个小小的awk-one-liner,可以完美地满足我的需要,即从php文件中删除注释。但我想更好地理解它: awk'/^\/\*/{c++}c=1; /^ \*\//{c++}' 不幸的是,为了更好地理解它的工作原理,我无法找到原来的帖子 Google在C++上发现了大量的东西,但不是原来的文章。两者都没有帮助 我并不特别被{c++}c难倒=1;位。任何帮助都将不胜感激 我已经测试了你的awk脚本,但它不能正常工作!!! 您应该使用以下

为一个相当简单的问题提前道歉

在一大堆“自我注释”中,我有一个小小的awk-one-liner,可以完美地满足我的需要,即从php文件中删除注释。但我想更好地理解它:

awk'/^\/\*/{c++}c=1; /^ \*\//{c++}'

不幸的是,为了更好地理解它的工作原理,我无法找到原来的帖子

Google在C++上发现了大量的东西,但不是原来的文章。两者都没有帮助


我并不特别被
{c++}c难倒=1;位。任何帮助都将不胜感激

我已经测试了你的
awk
脚本,但它不能正常工作!!! 您应该使用以下方法删除:

 gawk '/^\/\*/{c++} c!=1; /^.*\*\//{c=0}' php_file
要删除
/*注释*/
多行注释或只有
/*注释*/
的单行注释

测试日期:

简言之

  • awk
    将逐行读取输入文件,并执行其默认操作:打印
  • 当满足条件
    /^\/\*/
    时(
    /*
    注释直接位于行的开头),将执行块
    {c++}
    !,在
    awk
    中,变量默认为0,因此在块
    c=1
    c之后=1
    为false
    因此不会打印任何内容
  • 只要我们在评论区
    c=1
    为false
    因此不会打印任何内容
  • 然后我们到达注释的最后一行,c被设置回0,因此从下一行开始,所有内容都将再次打印
备注:

  • 后面有命令的行仍按原样打印
  • /
    注释不会被删除
  • 如果注释块后面的同一行中有一些超级重要的命令,它们将丢失

    /* comment starts
    /* still some comments
    end of comments */some super important commands;
    
改进:


  • 更改
    c=!1
    by
    c数值上下文中变量的初始值为
    0
    。。。因此,第一次执行
    c++
    时,它将有值
    1
    ,然后是
    2
    ,依此类推<代码>c=1是独立的代码块,与
    {c++}
    块无关。。。当
    c
    不是
    1
    时,条件将为真,并将打印输入记录(默认操作)。。如需了解更多此类习语,请参阅谢谢您的快速回答!所以它实际上是使用C++,它不是AWK注释吗?我有你提到的网站书签,但我看不到其中的C++。由于C++在注释标记的开始和结束时增加了var(代码> C/<代码> >代码> >代码> >代码> >代码> 1,它只删除第一个注释。@ Farhang与C++语言无关,它使用字母
    c
    作为计数器,并在每次找到多行注释开头时递增,例如每次找到
    /*
    和结束时,例如找到
    */
    。谢谢David。我认为它与C++无关,但我又担心我错过了更大的东西。谢谢你的澄清,非常感谢。这不仅有助于实际的awk,我很感激你解释得如此清楚。非常感谢。不客气!:-)
    awk
    sed
    是非常强大的工具,可以帮助您操作文件(尤其是代码/设置文件),当您有时间时,我只能建议您加深对这些工具的了解,这将提高您的工作效率!!
    /* comment starts
    /* still some comments
    end of comments */