【问题标题】:Delete all the lines in a file that contains a specific character删除文件中包含特定字符的所有行
【发布时间】:2011-09-05 12:04:44
【问题描述】:

我想删除文件中具有特定字符“?”的所有行/行就我而言。我希望在 Bash 或 AWK 或 Perl 中有一个单行命令。谢谢

【问题讨论】:

    标签: perl bash unix command-line awk


    【解决方案1】:

    您可以使用sed“就地”修改文件:

    sed -i "/?/d" file
    

    或者,使用 grep:

    grep -v "?" file > newfile.txt
    

    【讨论】:

    • 您可以在 GNU sed 中使用-i;一般来说,它不是其他版本的标准。
    【解决方案2】:

    更好的是,只需一行使用sed

    sed '/?/d' input
    

    使用-i 就地编辑文件。

    【讨论】:

    • 据我了解,您不能在 perl 中做到这一点,对吧? perl -pe '/?/d' 不起作用。
    【解决方案3】:
    perl -i -ne'/\?/ or print' file
    

    perl -i -pe's/^.*?\?.*//s' file
    

    【讨论】:

      【解决方案4】:

      这里已经有 grep、sed 和 perl 解决方案 - 仅用于有趣的纯 bash 解决方案:

      pattern='?'
      while read line
      do
          [[ "$line" =~ "$pattern" ]] || echo "$line"
      done
      

      翻译

      • STDIN 上的每一行
      • 匹配模式=~
      • 如果匹配不成功|| - 打印该行

      【讨论】:

        【解决方案5】:
        awk '!($0~/?/){print $0}' file_name
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-27
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 2020-01-03
          • 1970-01-01
          • 2013-08-19
          相关资源
          最近更新 更多