删除文件中包含特定字符的所有行。

3
我希望能够在文件中删除所有包含特定字符'?'的行。我希望能够使用Bash、AWK或Perl中的单行命令。谢谢。
5个回答

9
你可以使用sed对文件进行“原地”修改:
sed -i "/?/d" file

另一种方法是使用grep:

grep -v "?" file > newfile.txt

1
你可以在GNU sed中使用“-i”;但是在其他版本中,通常不是标准的。 - Jonathan Leffler

6
更好的是,只需要使用一个单独的sed命令即可。
sed '/?/d' input

使用-i选项直接编辑文件。


根据我的理解,你不能在Perl中这样做,对吗?perl -pe '/?/d'无法工作。 - kirill_igum

3
perl -i -ne'/\?/ or print' file

或者

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

2

这里已经有grep、sed和perl的解决方案了 - 只是为了好玩,还有一个纯bash的解决方案:

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

翻译

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

1
awk '!($0~/?/){print $0}' file_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接