2011-01-19 10 views
4

私はこの単語のすべての文字が単語パターンと一致するファイルにいくつかの単語を入れる正規表現をマウントしようとしています。grep/regexがアクセント付きの単語を見つけられない

私の問題は、正規表現はアクセント付きの単語を見つけることができませんが、テキストファイルにはアクセント付きの単語がたくさんあることです。

cat input/words.txt | grep '^[éra]\{1,4\}$' > output/words_era.txt 
cat input/words.txt | grep '^[carroça]\{1,7\}$' > output/words_carroca.txt 

し、ファイルの内容は次のとおりです:

私のコマンドラインは、私はそれを修正するにはどうすればよい

carroça 
éra 
éssa 
roça 
roco 
rato 
onça 
orça 
roca 

+1

'locale'の出力は何ですか? 'input/words.txt'のエンコーディングは何ですか? – ephemient

+1

それは私にとってはうまくいくかもしれませんが、多分問題は構文にあります。大括弧は文字のグループを定義するために使用されるので、少なくとも2行目は間違いです。試してみてください: grep '^carroça\ {1,3 \} $' – UncleZeiv

+0

@UncleZeiv、私は正しい正規表現を間違えてしまいました。 – GodFather

答えて

7

あなたのファイルがISO-8859-1でエンコードされていますが、システムのロケールがUTF-8で、これが動作しません。

ファイルをUTF-8に変換するか、システムロケールをISO-8859-1に変更します。

 
# convert from ISO-8859-1 to the environmental locale before grepping 
# output will be in the current locale 
$ iconv -f 8859_1 input/words.txt | grep ... 

# run grep with an ISO-8859-1 locale 
# output will be in ISO-8859-1 encoding 
$ cat input/words.txt | env LC_ALL=en_US grep ... 
+0

Dude、最初のオプション "iconv"が動作します。ありがとう。出力は今carroça ロカ ROCO ORCA ロカ 車 RAA – GodFather

1

私は関連する質問hereが見つかったようです。あなたが期待するものを生成

cat input/words.txt | LANG=C grep '^[éra]\{1,4\}$' > output/words_era.txt 

ん:

は、だからあなたのような何かをしようとすると? @duleが言ったように

+0

残念ながら、出力は同じです。 – GodFather

+0

は\をエスケープするのを忘れたので、投稿には表示されませんでした – dule

+1

これらの場合、正面にスペースを追加するだけで、コードはより読みやすく、エスケープする必要はありません。私はあなたのためにここでこれをしました – UncleZeiv

0

はなく、LANG=en_US.iso88591と、試してみてください。

cat input/words.txt | LANG=en_US.iso88591 grep '^[éra]\{1,4\}$' > output/words_era.txt 
+0

そのようなロケール名はありません。 – ephemient

+0

何もない、アクセントのない単語 – GodFather

+0

@ephemient: 'locale -a'を使って見つけました。これは私のマシンでテストされ、GodFather'sと同じ状況を再現した後に動作します。 – UncleZeiv

1

と仮定すると、すべてが、私はそれをやっているか知っているので、私は通常ちょうど

perl -CSAD -le 'print if /^carroça{1,3}$/' filenames 

ようなものを使用したい、UTF-8です。

+0

コメント(結局は)それは明確ではないすべてのものはしかし、UTF-8であることを確認です。 – ephemient

+1

@ephemientエンコードの苦難は無限に終わっているようですね。 – tchrist

関連する問題