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