如何删除包含特殊字符的行
我有一个很大的文本文件,里面有很多特殊字符,比如“$!@%#$/"等等。我想要把那些包含任何特殊字符的行删除掉。我要保留的字符只有字母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