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

时间:2011-10-29 04:38:11

标签: python linux bash

我有一个大文本文件,里面有很多特殊字符,比如“$!@%#$ /”加上更多,我想删除文本文件中的行,如果它有任何特殊字符那条线。我想要保留的唯一字符是a-z和A-Z。

如果这是文件......

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

然后唯一剩下的就是......

this
is
the
file

使用linux命令行工具,bash脚本或python脚本的解决方案会更好,但任何有效的方法都可以!

7 个答案:

答案 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)