次の標準のcsvファイルではなく、カンマ区切りのファイルがあります。
XYZ,143,ABC/genomes/date/pa341,dog,available
567,FTR/genomes/date/ha76870,horse,waiting
214,GEN/genomes/date/btr256,N/A,avialable,stored
...
「/genomes」で始まり、次のカンマ「、」文字まですべての文字列を抽出したいと思います。予想される出力は次のとおりです。
/genomes/date/pa341
/genomes/date/ha76870
/genomes/date/btr256
以下を試しましたが、不要な追加情報が印刷されます。
grep -o '/genomes.*,' myfile.txt
output:
/genomes/date/pa341,dog,
/genomes/date/ha76870,horse,
/genomes/date/btr256,N/A,stored
ベストアンサー1
*
「できるだけ長い文字列と一致」を意味するため、メソッドは失敗します。これを「貪欲な」修飾子といいます。貪欲ではない演算子である「できるだけ短い文字列と一致する」が欲しい。したがって、サポートしている場合は、次のように拡張正規表現をgrep
有効にして実行します。-P
$ grep -Po '/genomes.*?,' file
/genomes/date/pa341,
/genomes/date/ha76870,
/genomes/date/btr256,
しかし、より良いアプローチは、,
文字ではなく文字をできるだけ一致させることです。
$ grep -o '/genomes[^,]*' file
/genomes/date/pa341
/genomes/date/ha76870
/genomes/date/btr256