0

2 種類のリストから特別な URL を抽出する必要があります。

wav_list_01.txt:

http://www.example.com/3277rdsh6721vs2981fg66_453.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_89.wav?ID=8572145"
http://www.example.com/3277rdsh6721vs2981fg66_356.wav?ID=8572145"

このタイプのリストでは、正しい URL は常にアンダースコアの後に 4 桁の URL です。

http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145"

次の grep コマンドでこれを実現できます。

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}' wav_list_01.txt

今問題に。また、別の種類のリストから特別な URL を抽出する必要があります。

wav_list_02.txt:

http://www.example.com/83d72jd72bnx27887f2s34_9.wav?ID=0942145"
http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145"
http://www.example.com/83d72jd72bnx27887f2s34_5.wav?ID=0942145"

このタイプのリストでは、正しい URL は常にアンダースコアと 1 桁のないものです

http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145"

上記の grep コマンドを wav_list_02.txt でも動作するように変更する方法はありますか? そうでない場合、同じスクリプトで両方のリストを処理するための次善の策は何ですか?

スクリプトはダッシュ シェルで実行されるため、ソリューションは POSIX に準拠している必要があり、クリーンでシンプルであることが望ましいです。

前もって感謝します。

解決:

Thalmann の助けを借りて、解決策が見つかりました。

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}\|\|http[^_]*?ID=[0-9]\{1,\}'
4

1 に答える 1

0

not 演算子 '^' を使用して、アンダースコア以外のすべてを指定できます。URL が一致する場合は、'[^_]*' のようなもので、アンダースコア以外のすべてを指定できます。

上記のgrepコマンドに「or」演算子を使用して挿入すると、4桁のファイルと、アンダースコアが含まれていない場合の両方が取得されます。or 演算子を次のようにエスケープすることを忘れないでください: '\|'

于 2013-03-27T17:15:07.600 に答える