我有一个大文本文件,里面有很多特殊字符,比如“$!@%#$ /”加上更多,我想删除文本文件中的行,如果它有任何特殊字符那条线。我想要保留的唯一字符是a-z和A-Z。
如果这是文件......
!Somejunk)(^%
)%(&_
this
my_file
is
*(%%$
the
they're
file
然后唯一剩下的就是......
this
is
the
file
使用linux命令行工具,bash脚本或python脚本的解决方案会更好,但任何有效的方法都可以!
答案 0 :(得分:8)
$ grep '^[[:alpha:]]\+$' << EOF
> !Somejunk)(^%
> )%(&_
> this
> my_file
> is
> *(%%$
> the
> they're
> file
> EOF
this
is
the
file
答案 1 :(得分:3)
这似乎有效:
sed '/[^[:alpha:]]/d' source_file
答案 2 :(得分:1)
如果你想只保留带有字母字符的行(如请求的OP),那么:
$ grep -v '[^a-zA-Z]' foo
或者,如果您只想要英语字符:
$ grep -v '[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]' foo
但是如果您只想删除非字母字符,sed
将完成这项工作:
$ cat foo | sed 's/[^a-zA-Z]//g'
或者如果您只想杀死二进制,不可打印的数据,请使用字符串:
$ strings foo
答案 3 :(得分:0)
grep -v
和一些正则表达式?
说,
egrep -v '[^a-zA-Z]'
答案 4 :(得分:0)
您可以使用以下命令过滤掉所需的行:
grep'^ [A-Za-z] \ + $'文件
如果您甚至不允许行中的空格,则可以在 z 之后省略空格。
答案 5 :(得分:0)
或者在bash中完全喜欢这个
#!/bin/bash
file=$(cat file.txt);
for line in $file; do
if [[ $line =~ ^[a-zA-Z]+$ ]]; then
echo $line
fi
done
答案 6 :(得分:0)
我将采取真正的nooby方法。
x = open('file','r')
y = x.read().split('\n')
x.close()
for z in range (0, len(y)):
for a in range (0, len(y[z])):
if not y[z][a].isalpha() and not y[z][a].isdigit():
y[z][a] = ''
OutputString = '\n'.join(y)