【发布时间】:2016-05-25 14:29:32
【问题描述】:
我有多个扩展名为 .txt 的文件,在所有文件中,有些行带有“?”符号,那么如何使用单个 AWK/perl 命令删除所有文件中的整行
我使用了以下命令:
perl -pi -e "s/\?//g" *.txt
但它只删除?符号不是整行,所以请帮我删除包含“?”的整行符号。
【问题讨论】:
我有多个扩展名为 .txt 的文件,在所有文件中,有些行带有“?”符号,那么如何使用单个 AWK/perl 命令删除所有文件中的整行
我使用了以下命令:
perl -pi -e "s/\?//g" *.txt
但它只删除?符号不是整行,所以请帮我删除包含“?”的整行符号。
【问题讨论】:
单个文件最简单的解决方案是grep -Fv \? old_file > new_file。你也可以使用sed -i '/\?/d' old_file。如果你想一次处理所有文件,而不写循环,第二个选项更方便,因为sed可以一次处理多个文件。
【讨论】:
?,它是 ERE 元字符,而不是 BRE,因此通过转义它,您将在某些 sed 中激活它的 ERE 属性。保持原样sed '/?/d'。对于 grep,您不需要 -F,因为它只是 BRE 中的文字字符并引用它,不要转义它:grep -v '?' file。
一种方式:
perl -ni -e 'next if /\?/; print' *.txt
-n 标志以与-p 相同的方式循环文件,但是它不会自动打印该行;它把这个责任留给了你。所以我们要做的是遍历所有行,跳过带有? 和next() 的行,然后打印所有其他行。
【讨论】:
perl -ni -e 'print if !/\?/' *.txt