如何删除包含特殊字符的行

3 投票
7 回答
1210 浏览
提问于 2025-04-17 05:13

我有一个很大的文本文件,里面有很多特殊字符,比如“$!@%#$/"等等。我想要把那些包含任何特殊字符的行删除掉。我要保留的字符只有字母a到z和A到Z。

如果这个是文件内容……

!Somejunk)(^%
)%(&_
this
my_file
is
*(%%$
the
they're
file

那么剩下的内容就应该是……

this
is
the
file

用Linux命令行工具、bash脚本或者Python脚本来解决这个问题会更好,但只要能用的方法都可以!

7 个回答

3

这看起来是有效的:

 sed '/[^[:alpha:]]/d' source_file
8
$ grep '^[[:alpha:]]\+$' << EOF
> !Somejunk)(^%
> )%(&_
> this
> my_file
> is
> *(%%$
> the
> they're
> file
> EOF
this
is
the
file

这段代码的意思是……

首先,它定义了一个变量,变量就像一个盒子,可以用来存放数据。接着,它给这个变量赋了一个值,这个值可以是数字、文字或者其他类型的数据。

然后,代码可能会进行一些操作,比如计算、比较或者改变这个变量的值。最后,代码会输出结果,告诉你计算的结果是什么,或者显示一些信息。

总的来说,这段代码就是在做一些基本的操作,帮助你处理和展示数据。

1

如果你只想保留包含字母的行(就像提问者要求的那样),那么:

$ grep -v '[^a-zA-Z]' foo

或者如果你只想要英文字符:

$ grep -v '[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]' foo

但如果你只是想去掉非字母字符,sed可以完成这个任务:

$ cat foo | sed 's/[^a-zA-Z]//g'

或者如果你只想去掉二进制的、不可打印的数据,可以使用strings:

$ strings foo

撰写回答