【问题标题】:How do you delete all lines that begin with "string" in unix sh?如何在 unix sh 中删除所有以“string”开头的行?
【发布时间】:2011-12-25 11:24:03
【问题描述】:

如何删除sh中以“string”开头的所有行?我正在考虑使用 sed 命令。

【问题讨论】:

    标签: file unix sed sh


    【解决方案1】:
    grep -v '^string' yourfile.txt > stripped.txt
    

    【讨论】:

    • 如何从同一个文件中取出?
    • 不能用 grep 真正做到这一点。但你可以输出到一个临时文件然后mv tempfile origfile。如果您想要真正的就地编辑,则需要使用 sed/perl/awk。
    • 那我将如何使用它们呢? :D
    • 没用,只重印了包含字符串的行以外的行
    【解决方案2】:

    要做到这一点,如果你的 sed 支持 -i 选项,你可以这样做:

    sed -i '/^string/d' 输入文件

    【讨论】:

    • sed 在使用 -i 时需要一个文件扩展名来备份,在 OS X 中你必须非常迂腐,所以明确地使用单引号:sed -i '' '/^string/d' input-file
    • 在 OSX 中,默认的 sed 甚至不支持 -i!我个人的偏好是永远不要使用 -i 而是使用 shell 进行重定向。
    • 不需要-e
    • 它在 ksh 中不起作用?如果文本的行为“string-d”,那么呢?不工作
    【解决方案3】:

    您的答案中的 sed 和 grep 缺少他们的朋友 awk:

    awk '!/^string/' inputfile > resultfile
    

    【讨论】:

    • 我需要它在同一个文件中
    【解决方案4】:

    你可以在 Ex 模式下使用 Vim:

    ex -sc g/^string/d -cx file
    
    1. g选择所有匹配的行

    2. d删除

    3. x保存并关闭

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2012-01-02
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多