特殊文字で始まり終わるコンテンツの抽出

特殊文字で始まり終わるコンテンツの抽出

次の標準の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

おすすめ記事