2017-03-07 65 views
-1

我有一个包含文件名看起来像这样的 “aaa.ext”文件文本
“ABC”
“a1a.ext”
“东亚银行”
“PAT”
“ff#!”
“TOTO € .PDF”
“......”
的grep:过滤掉只包含特定字符

我需要提取包含标准英语合法字符(包括AZ,az,0-9,_和。)和其他字符线

关于上面的例子中,输出应该是这样
BEA(包含é代替E)
PAT(包含à代替)
“FF#!”
“toto € .pdf”

任何想法?

在此先感谢

回答

0

尝试

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 "´" 

的问题是有点异国情调,应该不会造成太多的麻烦。

+0

Socowi喜+1的快速反应。建议的命令会突出显示特殊字符,但是它不会排除不包含任何 – BNT

+0

@BNT的行奇怪...我测试了这两个命令并获得了期望的结果。你能举出另一个例子,其中没有特殊字符的行被接受吗? – Socowi

+0

这里有几个例子
12 - Mémo.pdf
2016年4月25日ᄋ ᅩ ᄒ ᅮ 7.59.12.jpg
20161109133127734.pdf
〜9963007Opoto.pdf
在上面的例子;应该检索第2行和第4行,第1行和第3行不应该
再次感谢 – BNT