Remove lines that contain non-english (Ascii) characters from a file
我有一个文本文件,其中包含来自不同语言(例如中文,拉丁语等)的字符
我想删除所有包含这些非英语字符的行。我要包括所有英文字符(a-b),数字(0-9)和所有标点符号。
如何使用awk或sed之类的unix工具来实现它。
Perl支持
1 | perl -nle 'print if m{^[[:ascii:]]+$}' inputfile |
对于支持perl兼容正则表达式的GNU grep,您可以使用:
1 | grep -P '^[[:ascii:]]+$' file |
只要您强制使用C语言环境,就可以使用Awk:
1 | LC_CTYPE=C awk '! /[^[:alnum:][:space:][:punct:]]/' my_file |
环境变量
编辑:也可以使用grep:
1 | LC_CTYPE=C grep -v '[^[:alnum:][:space:][:punct:]]' my_file |
您可以使用
考虑一下,
嗯,双重否定(
您也可以只过滤ASCII:
1 | egrep -v"[^ -~]" foo.txt |