BSDとGNU grepがここで異なる結果を提供するのはなぜですか?

BSDとGNU grepがここで異なる結果を提供するのはなぜですか?

公開CSVファイルのわずかに変更されたバージョンをデプロイしました。変更されたCSVファイルを生成するために、短い1行のgrepコマンドを使用しました。

grep -Ev '^([A-Za-zA-Za-z]|[0-90-9]*),' input.csv

実際のプロジェクトはここ

ユーザーレポートロケールが正しく設定されていても、MacのBSD grepはGNU grepとは異なる結果を提供します。なぜこれが起こるのかわからないし、テストするMacやBSDシステムもありません。 (LinuxにBSD grepをインストールする方法はありますか?クイック検索では何も見つかりませんでした...)

上記のコマンドが同じロケールで異なる結果を返すのはなぜですか?申し訳ありません。元のCSVファイルは提供されていませんが、200 MBを超えるため、ダウンロードできます。ここ必要に応じてlex.csvv2.3.0です。


データをより詳細に説明するために、CSVファイルは日本語の単語のリストです。最初のフィールドは、引用されていない文字通りの単語です。ここで正規表現の目的は、次のいずれかの項目を削除することです。

  1. ラテンアルファベットの手紙[A-Za-zA-Za-z]
  2. 任意の長さの純粋数[0-90-9]*

Unicode文字は全角ラテン語日本でレガシーな理由で使われるキャラクターです。

以下は、ランダムに選択されたデータ例です。

Fishstat,16201,17684,438,名詞,普通名詞,一般,*,*,*,エフアイエスエイチエスティーエーティー,FISHSTAT,Fishstat,エフアイエスエイチエスティーエーティー,Fishstat,エフアイエスエイチエスティーエーティー,記号,*,*,*,*,*,*,体,エフアイエスエイチエスティーエーテ
ィー,エフアイエスエイチエスティーエーティー,エフアイエスエイチエスティーエーティー,エフアイエスエイチエスティーエーティー,16,C1,*,25110105422963200,91350
FINA,14662,15435,406,名詞,固有名詞,一般,*,*,*,エフアイエヌエー,FINA,FINA,エフアイエヌエー,FINA,エフアイエヌエー,固,*,*,*,*,*,*,固有名,エフアイエヌエー,エフアイエヌエー,エフアイエヌエー,エフアイエヌエー,7,*,*,57503092366778880,209195
FINA,14662,15435,406,名詞,固有名詞,一般,*,*,*,エフアイエヌエー,FINA,FINA,エフアイエヌエー,FINA,エフアイエヌエー,固,*,*,*,*,*,*,固有名,エフアイエヌエー,エフアイエヌエー,エフアイエヌエー,エフアイエヌエー,7,*,*,57503092366778880,209195
FIA,16210,17693,438,名詞,普通名詞,一般,*,*,*,エフアイエー,FIA,FIA,エフアイエー,FIA,エフアイエー,記号,*,*,*,*,*,*,体,エフアイエー,エフアイエー,エフアイエー,エフアイエー,5,C2,*,1099520251404800,4000
FIA,16210,17693,438,名詞,普通名詞,一般,*,*,*,エフアイエー,FIA,FIA,エフアイエー,FIA,エフアイエー,記号,*,*,*,*,*,*,体,エフアイエー,エフアイエー,エフアイエー,エフアイエー,5,C2,*,1099520251404800,4000
エフ・アイ・シー,14659,15432,-1018,名詞,固有名詞,一般,*,*,*,エフアイシー,FIC-FIC,エフ・アイ・シー,エフアイシー,エフ・アイ・シー,エフアイシー,固,*,*,*,*,*,*,固有名,エフアイシー,エフアイシー,エフアイシー,エフアイシー,5,*,*,52112736611607040,189585
FIC,14659,15432,406,名詞,固有名詞,一般,*,*,*,エフアイシー,FIC-FIC,FIC,エフアイシー,FIC,エフアイシー,固,*,*,*,*,*,*,固有名,エフアイシー,エフアイシー,エフアイシー,エフアイシー,5,*,*,52112736645161472,189585
FIC,14659,15432,406,名詞,固有名詞,一般,*,*,*,エフアイシー,FIC-FIC,FIC,エフアイシー,FIC,エフアイシー,固,*,*,*,*,*,*,固有名,エフアイシー,エフアイシー,エフアイシー,エフアイシー,5,*,*,52112736645161472,189585
FIZ,16209,17692,438,名詞,普通名詞,一般,*,*,*,エフアイゼット,FIZ,FIZ,エフアイゼット,FIZ,エフアイゼット,記号,*,*,*,*,*,*,体,エフアイゼット,エフアイゼット,エフアイゼット,エフアイゼット,5,C1,*,25108181277614592,91343
FIZ,16209,17692,438,名詞,普通名詞,一般,*,*,*,エフアイゼット,FIZ,FIZ,エフアイゼット,FIZ,エフアイゼット,記号,*,*,*,*,*,*,体,エフアイゼット,エフアイゼット,エフアイゼット,エフアイゼット,5,C1,*,25108181277614592,91343
FIT,16209,17692,438,名詞,普通名詞,一般,*,*,*,エフアイティー,FIT,FIT,エフアイティー,FIT,エフアイティー,記号,*,*,*,*,*,*,体,エフアイティー,エフアイティー,エフアイティー,エフアイティー,5,C1,*,25107906399707648,91342
FIT,16209,17692,438,名詞,普通名詞,一般,*,*,*,エフアイティー,FIT,FIT,エフアイティー,FIT,エフアイティー,記号,*,*,*,*,*,*,体,エフアイティー,エフアイティー,エフアイティー,エフアイティー,5,C1,*,25107906399707648,91342

ユーザーレポートによると、BSD grep正規表現はGNU grepよりも多くの項目を除外します(約8000対232)。残念ながら、彼らは正確な違いを報告しません。


この問題を報告したユーザーに連絡しましたが、そのユーザーが提供した情報は次のとおりです。主なポイントBSD grep に一致する項目の数。このコマンドを使用して項目が見つかったことを示します(-v使用されていないようです)。

grep -Ev '^([A-Za-zA-Za-z]|[0-90-9]*),' lex.csv

一見すると、句読点や絵文字(例えば(´・ω・`))があるようです。これがなぜ私の範囲に含まれるのかわかりません。また、間違っているように見える複数文字のアルファ項目も含まれています。

ベストアンサー1

おすすめ記事