シェルから非 ASCII 文字を識別するにはどうすればよいでしょうか?

シェルから非 ASCII 文字を識別するにはどうすればよいでしょうか?

、、などgrepのコマンドラインユーティリティを使用して、ファイル内のすべての非 ASCII 文字とそれらが出現する行番号を印刷する簡単な方法はありますか?awkperl

テキスト ファイルのエンコードを UTF-8 から ASCII に変更したいのですが、変更する前に、ファイル変換ルーチンによって予期しない文字変更が発生しないように、非 ASCII 文字のすべてのインスタンスを手動で置き換えたいと考えています。

答え1

$ perl -ne 'print "$. $_" if m/[\x80-\xFF]/'  utf8.txt
2 Pour être ou ne pas être
4 Byť či nebyť
5 是或不

または

$ grep -n -P '[\x80-\xFF]' utf8.txt
2:Pour être ou ne pas être
4:Byť či nebyť
5:是或不

utf8.txtは

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不

答え2

テキスト ファイルのエンコードを UTF-8 から ASCII に変更したいのですが...

... 非 ASCII 文字のすべてのインスタンスを置き換えます...

次に、変換ツールにそのように指示します。

$ iconv -c -f UTF-8 -t ASCII <<< 'Look at 私.'
Look at .

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou

関連情報