【问题标题】:Delete all lines containing double forward slashes删除所有包含双斜杠的行
【发布时间】:2015-01-20 19:23:16
【问题描述】:

我有一个示例文本文件,其中包含如下行:

/home0/abc/xyz/Example1.java:               //  log.error("error" , exception);
/home0/abc/xyz/Example2.java:                   log.error("error" , exception);
/home0/abc/xyz/Example3.java:               //  log.error("error" , exception);
/home0/abc/xyz/Example4.java:                   log.error("error" , exception);

如何在 shell 脚本中删除所有包含双斜杠的行(即包含 cmets 的行)。

我的最终输出应该如下所示:

/home0/abc/xyz/Example2.java:                   log.error("error" , exception);
/home0/abc/xyz/Example4.java:                   log.error("error" , exception);

【问题讨论】:

    标签: bash shell sed grep


    【解决方案1】:

    你可以使用 grep,

    grep -v '//' file
    

    来自grep --help

    -v, --invert-match        select non-matching lines
    

    通过 sed,

    sed '/\/\//d' file
    

    上面的 sed 命令将删除那些包含两个正斜杠的行。上述 sed 的语法是 sed '/regex/d' file。因为 / 用作 sed 分隔符,所以请转义正则表达式中存在的斜杠以匹配文字正斜杠。

    通过 awk,

    awk '!/\/\//' file
    

    ! 否定模式并强制 awk 打印不包含 // 的行

    【讨论】:

    • 嘿 Avinash,如果我使用 grep -v '//' 文件,它只是在控制台上打印匹配的行,而不是从源文件中删除。
    • 是的,那么您可以将输出重定向到另一个文件grep -v '//' infile > outfile,同样适用于 awk。但在 sed 中,您可以使用 -i 参数进行就地编辑,例如 sed -i '/\/\//d' file
    • 谢谢阿维纳什。我将输出重定向到另一个文件。好多了
    【解决方案2】:

    在 vi 或 vim 编辑器中,执行以下操作:

    :g/\/\//d

    即:冒号、g、斜线、反斜线、斜线、反斜线、斜线、斜线、d

    【讨论】:

    • 解释可能有助于其他人理解。
    • : 用于命令头,g 用于在所有行上执行以下命令,/.../ 用于模式匹配,\/\/ 是要查找的模式,d 用于删除线
    【解决方案3】:

    在 grep 中你应该像这样使用 -v 选项

    grep -v pattern filename
    

    -v - 用于反转模式匹配。

    在 sed 中

      sed '/\/\//d' filename
    

    d - 删除模式匹配行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多