Grep -o または Sed/Awk を使用して文字列の途中からフラグメントを取得します。

Grep -o または Sed/Awk を使用して文字列の途中からフラグメントを取得します。

ログトラフィックを観察していますが、さまざまな画像検索エンジン(特にBing)が頻繁に乱用されていることを確認しました。

例URL:

http://www.bing.com/images/search?q=dagger+genesis+solo&view=detailv2&&&id=C65E811DFE01FB11258D2EB4F516F3DD8F09049C&selectedIndex=4&ccid=ffC0NVO8&simid=608046582336849763&thid=JN.XnLfF7qiZGwjJzTCR6f7ZQ&mode=overlay

「Dagger Origins Solo」という検索自体を取り出したいです。

私はできます。

grep -o '=*' 

しかし、検索の後には=記号とすべての内容が残ります。

「search?q=」と最後の単語の最後の最初の「&」(前の「+」)の間のすべての内容を把握したいと思います。

awkまたはcutを使用してできるだけ多くの文字列を削除し、指定されたフィールド区切り文字を使用して各単語を独自の列に配置し、その列を印刷するために非常に長く複雑な方法で到達できます。しかし、この方法も一貫性がありません。これは、検索の長さに制限がなく、ほぼすべての文字を含めることができるためです。

もっと簡単な方法があると思います。アイデアはありますか?

私の究極の目標は、クエリを削除し、それを一意のアイテムとして整理することです。

ベストアンサー1

システムがgrepPCREモードをサポートしている場合は、次のものを使用できます。周りを見てください(長さ0のアサーション)文字選択〜サイ search?q=そして&

grep -Po '(?<=search\?q=).+?(?=&)'

2つの間に貪欲でない修飾子を使用すると、?最初の項目で一致が停止します&

おすすめ記事