外部ファイルへのリンクを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
答え2
egrepは貪欲ではない一致をサポートしていません。 Perlモードを使用すると、-P
次の利点があります。
grep -o -m1 -P 'https.*?mp3' example.txt
答え3
~$ cat example.txt
(https://example.com/pathto/music.mp3)music.mp3
~$ grep -Po "(https)[^'\"].*?mp3" example.txt
https://example.com/pathto/music.mp3