从文件夹中的所有文件中删除带有特殊字符的多行文本

从文件夹中的所有文件中删除带有特殊字符的多行文本

i.e. //*(): etc我在尝试删除的文件夹中的多个文件中包含带有特殊字符 ( ) 的多行文本,如下所示。使用sedand尝试了所有不同的解决方案,awk但似乎没有一个喜欢//

// Some text with (something else) and a clack 6*5. 
// Rest on the next line with some more  
// etc. http://website.com/helloworld.php 
// and just another line.

我所需要的只是从文件夹中的所有文件中搜索并删除此文本data

答案1

有几种方法可以//使用以下方法来处理序列sed

  1. 反斜杠转义每个/实例

    sed '/^\/\//d' file
    
  2. 将其放入字符列表/[...]

    sed  '/^[/]\{2\}/d' file
    

    或(使用 GNU sed)

    sed -r /^[/]{2}/d' file
    
  3. 将正则表达式分隔符更改为其他字符,以便按//字面意思处理序列

     sed '\%^//%d' file
    

答案2

这里有3种方法。

  1. 使用海湾合作委员会

    您可以将其用作gcc预处理器来删除 C/C++ 文件中的注释。

    例子

    $ cat test.c 
    #define foo bar
    foo foo foo
    #ifdef foo
    #undef foo
    #define foo baz
    #endif
    foo foo
    
    // Some text with (something else) and a clack 6*5. 
    // Rest on the next line with some more  
    // etc. http://website.com/helloworld.php 
    // and just another line.
    

    要删除评论:

    $ gcc -fpreprocessed -dD -E test.c
    # 1 "test.c"
    #define foo bar
    foo foo foo
    #ifdef foo
    #undef foo
    #define foo baz
    #endif
    foo foo
    

    可以调整使用find . -iname "*.c"来查找所有.c文件并在它们上运行上述内容,这将是一种方法。

  2. 使用stripcmt

    有一个工具叫条带(即删除注释)您可以用它来做您想做的事情。

  3. 使用 Perl

    您还可以使用此 Perl CPAN 模块通过自定义脚本删除注释。 CPAN 模块称为:正则表达式::通用::注释。 CPAN 页面上有有关如何执行此操作的示例。

答案3

您也可以只使用grep

grep -v // file

打印-v的行与给定的模式不匹配。

或者perl

perl -ne 'print unless m#^//#;' file 

或者

perl -ne 'next if m#^//#; print' file 

相关内容