egrep は一致しない行と一致します。

egrep は一致しない行と一致します。

CSVの浮動小数点を含む最初の列の浮動小数点が小数点の後に1であることを確認しようとしています。私のCSVのサンプル行は次のとおりです。

1082805252197942751,34225793738713276,serialtooldata,1,ターゲット,75512140,125.0,63.0,29.0,1,,,,0,899,,

7番目の列は私が興味のある列であり、その上の行には小数点以下1がありません(125.0)

私は2つの可能な正規表現を思いついた。

^[0-9]+,[0-9]+,[a-z0-9]+,[0-9]+,[A-Za-z0-9\ ]+,[0-9]+,[0-9]+\.1

または

^[A-Za-z0-9\ ,]+\.1

これらの両方が機能しているようです。つまり、regex101などの正規表現テストページでは、ここそしてここ) は正規表現と正確に一致しません。しかし、このように端末で試してみると

egrep ^[0-9]+,[0-9]+,[a-z0-9]+,[0-9]+,[A-Za-z0-9\ ]+,[0-9]+,[0-9]+\.1 tool_data_160321.csv

または

egrep ^[A-Za-z0-9\ ,]+\.1 tool_data_160321.csv

これにより、対応する行が一致としてリストされます。egrepこの行は正規表現と一致すると思われますが、そうでないのはなぜですか?

答え1

引用符が欠落しているからです。バックスラッシュはシェルによって解釈され、grepコマンドは代わりにバックスラッシュを取得する.1ため、\.1バックスラッシュの後に続くすべての文字と一致します1

文字列全体を引用することをお勧めします。

egrep '^[A-Za-z0-9\ ,]+\.1' tool_data_160321.csv

または、この場合は引用符を引用してください。

egrep ^[A-Za-z0-9\ ,]+\\.1 tool_data_160321.csv

2番目の例は、どのファイルが存在するかに応じてまだ驚きを引き起こす可能性があるため、文字列全体を引用しても間違いありません。

関連情報