貪欲でない grep

貪欲でない grep

外部ファイルへのリンクをgrepしたいですexample.txt

example.txt含む:

(https://example.com/pathto/music.mp3)music.mp3

パスワード:

egrep -o -m1 '(https)[^'\"]+.mp3' example.txt

出力:

https://example.com/pathto/music1.mp3)music.mp3

grepを実行すると、最後の.mp3は出力の終わりとして検出されますが、最初の発生後にのみ終了する必要があります。最初のパターンを見つけたら、grepに停止するようにどのように指示しますか?

私が望む出力:

https://example.com/pathto/music.mp3

次に始めてhttps終わる文字列を抽出したいと思います。mp3

ベストアンサー1

?標準のgrepは通常、貪欲にならない修飾子を許可しません。

ただし、ディストリビューションで有効になっている場合は、-Pオプションを使用してPerlスタイルの正規表現を許可します。

grep -oP -m1 "(https)[^'\"]+?.mp3" mp3.txt

それでも機能しない場合は、特定の例の範囲に正しい角かっこを含めて、角かっこから出ないようにすることができます。

egrep -o -m1 "(https)[^'\")]+?.mp3" mp3.txt

おすすめ記事