0

ユーロ記号を含む特定の正規表現クラスはありますか?grepマニュアルによると、[:print:]クラス(AFAIK€は印刷可能)と[:punct:]クラスには、ロケール(en_US.UTF-8)とASCII句読文字( $を含む)

$ echo "I can has 5€ ?"  | grep -o "[[:print:]*"
I can has 5

すべての印刷可能な文字をキャッチできる別の解決策はありますか(この問題はドル以外のすべての通貨文字で発生すると思います)?

編集 パテ設定で遊んだ後、ファイルを印刷するときに€を表示することができましたが、それをgrepすると奇妙に動作します。最初は、パテエンコーディングを(Unicodeではなく)cp1252に変更した後、「€」bbutを印刷することさえできませんでしたが、記号が表示されます。greppingはまだ機能しません

$ cat test.bah
I can has 5€ ?
$ cat test.bah | grep -o '[[:print:]]*'
I can has 5
 ?
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
...
4

2 に答える 2

1

どうやら、私のマシンでは:

Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-virtual i686) 
grep --version grep (GNU grep) 2.10 
bash --version GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)

解決策は、-Pスイッチを使用し、 文字を一致さ[[:print:]]せるか、印刷できないようにすることでした。[^[:print:]]

$ cat test.bah
I can has 5€  or 5£?
$ cat test.bah | grep -P -o '[[:print:]]*'
I can has 5
  or 5
?

(ところで、新しい行は複数の一致の結果であり、通貨記号の誤植ではありません)

$ cat test.bah | grep -P -o '[^[:print:]]*'
€
£
$ cat test.bah | grep -P -o '([[:print:]]|[^[:print:]])*'
I can has 5€  or 5£?

いくつかのメモ:

  1. @melpomeneは彼の回答の中で、彼のコンソールまたはバージョンのgrepが通貨記号をより適切に処理することを示しました。私はubuntu12.04のawsストックバージョンを使用しています
  2. 私の質問では、誰かが設定を必要とする場合に備えて、パテの設定を変更する必要があると述べました-[ウィンドウ]-> [翻訳]->受信したデータを直感的にWin1252(Western)カウンターに設定し、encoedingをUTF-8に設定します選択した描画文字で€と£が#または▒dependingとして表示されるようにしました)
于 2012-12-13T18:20:52.380 に答える
0
$ echo "I can has 5€ ?" | grep -o '[[:print:]]*'
I can has 5€ ?
$ echo $LANG
en_US.utf8
于 2012-12-13T17:39:03.360 に答える