から非英語(ASCII)文字を含む行私はこれらの非英語を含むすべての行を削除したい私は(中国、ラテンなど)などの異なる言語の文字を含むテキストファイルを持っているファイル
を削除します文字。英語の文字(a〜b)、数字(0〜9)、すべての句読点を含めたい。
awkやsedのようなUNIXツールを使ってどうすればいいですか?
から非英語(ASCII)文字を含む行私はこれらの非英語を含むすべての行を削除したい私は(中国、ラテンなど)などの異なる言語の文字を含むテキストファイルを持っているファイル
を削除します文字。英語の文字(a〜b)、数字(0〜9)、すべての句読点を含めたい。
awkやsedのようなUNIXツールを使ってどうすればいいですか?
Perlは[:ascii:]
文字クラスをサポートしています。
perl -nle 'print if m{^[[:ascii:]]+$}' inputfile
あなたは(必要に応じてより多くの句読点を含め)パターンに一致する行だけないを返し、パターンとして[^ a-zA-Z0-9.,;:-'"?!]
のようなものを使用するegrep -v
を使用することができます。
でも、それについて考えると、ダブルネゲート(-v
と倒立文字クラス)はおそらくそれほど良くありません。別の方法は^[ a-zA-Z0-9.,;:-'"?!]*$
です。あなたはまた、単にASCIIのためにフィルタリングすることができ
:
egrep -v "[^ -~]" foo.txt
あなたはCロケールの使用を強制提供し、Awkのを使用することができます。
LC_CTYPE=C awk '! /[^[:alnum:][:space:][:punct:]]/' my_file
環境変数LC_TYPE=C
(またはLC_ALL=C
)の文字分類のためのCロケールの使用を強制します。これは、文字クラス([:alnum:]
、[:space:]
など)の意味をASCII文字のみと一致するように変更します。
/[^[:alnum:][:space:][:punct:]]/
正規表現マッチラインには、非ASCII文字を使用します。正規表現の前の!
は条件を逆転させます。 ASCII以外の文字がない行だけが一致します。アクションが与えられていないので、行のマッチングにデフォルトアクションが使用されます(print
)。
EDIT:これはまた、grepで実行することができます:Perl互換の正規表現をサポートしているのGNU grepのと
LC_CTYPE=C grep -v '[^[:alnum:][:space:][:punct:]]' my_file
は、あなたが使用することができます。
grep -P '^[[:ascii:]]+$' file
ありがとうございます。これは完全に機能しました。 – Sudar