さまざまな言語 (中国語、ラテン語など) の文字を含むテキスト ファイルがあります。
これらの英語以外の文字を含むすべての行を削除したいと考えています。すべての英字 (ab)、数字 (0-9)、およびすべての句読点を含めたい。
awk や sed などの UNIX ツールを使用してそれを行うにはどうすればよいですか。
Perl は[:ascii:]
文字クラスをサポートしています。
perl -nle 'print if m{^[[:ascii:]]+$}' inputfile
を使用して、パターンに一致しない行のみを返し、パターンのようなものを使用できます(egrep -v
必要に応じて句読点を追加します)。[^ a-zA-Z0-9.,;:-'"?!]
うーん、考えてみれば、二重否定 (-v
と反転文字クラス) はおそらくあまり良くありません。別の方法かもしれません^[ a-zA-Z0-9.,;:-'"?!]*$
。
ASCII でフィルタリングすることもできます。
egrep -v "[^ -~]" foo.txt