【问题标题】:How to remove particular lines containing specific symbol using AWK / perl如何使用 AWK / perl 删除包含特定符号的特定行
【发布时间】:2016-05-25 14:29:32
【问题描述】:

我有多个扩展名为 .txt 的文件,在所有文件中,有些行带有“?”符号,那么如何使用单个 AWK/perl 命令删除所有文件中的整行

我使用了以下命令:

perl -pi -e "s/\?//g" *.txt

但它只删除?符号不是整行,所以请帮我删除包含“?”的整行符号。

【问题讨论】:

    标签: perl awk


    【解决方案1】:

    单个文件最简单的解决方案是grep -Fv \? old_file > new_file。你也可以使用sed -i '/\?/d' old_file。如果你想一次处理所有文件,而不写循环,第二个选项更方便,因为sed可以一次处理多个文件。

    【讨论】:

    • @stevieb 我已经修改了我的答案。
    • sed -i '/\?/d' 文件不工作,sed: 1: "ff": 无效命令代码
    • @mona 所以你使用的是 OSX,是吗?
    • 不要在 sed 中转义 ?,它是 ERE 元字符,而不是 BRE,因此通过转义它,您将在某些 sed 中激活它的 ERE 属性。保持原样sed '/?/d'。对于 grep,您不需要 -F,因为它只是 BRE 中的文字字符并引用它,不要转义它:grep -v '?' file
    【解决方案2】:

    一种方式:

    perl -ni -e 'next if /\?/; print' *.txt
    

    -n 标志以与-p 相同的方式循环文件,但是它不会自动打印该行;它把这个责任留给了你。所以我们要做的是遍历所有行,跳过带有?next() 的行,然后打印所有其他行。

    【讨论】:

    • 不需要下一个perl -ni -e 'print if !/\?/' *.txt
    • 你是对的。我不知道为什么我没有那样做。早上还很早;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2015-07-14
    相关资源
    最近更新 更多