grep:过滤掉仅包含特定字符的文本

时间:2017-03-07 10:55:27

标签: linux

我有一个包含文件名的文件,看起来像这样     “aaa.ext”
    “ABC”
    “a1a.ext”
    “东亚银行”
    “PAT”
    “FF#!”
    “toto€ .pdf”
    “...”

我需要提取包含标准英语字母数字(A-Z,a-z,0-9,_和。)和其他字符的行

关于上面的例子,输出应该像
    béa(包含é而不是e)
    pàt(包含à而不是a)
    “FF#!”
    “toto€ .pdf”

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

尝试

LC_ALL=C.UTF-8 grep '[A-Za-z0-9_.]' yourFile |
LC_ALL=C.UTF-8 grep '[^A-Za-z0-9_.]'

也可以写成

(export LC_ALL=C.UTF-8; grep -P '[\w.]' yourFile | grep -P '[^\w.]')

LC_ALL=C.UTF-8确保A-Z仅匹配标准英文字母而非é之类的字母。

注意:在Unicode中é可以编码为真实ée´相结合。如果您的文件包含以下两行(不带注释)

é # single character
é # combination of "e" and "´"

然后上面的命令将返回

é # combination of "e" and "´"

问题有点奇特,不应该造成太大麻烦。