質問のタイトルが多少曖昧かもしれませんが、私が言いたいことがまさにそれです。
私のサーバーにはローカルに頻繁に変更されるHTMLファイルがあります。何度も表示されます。
<p>Jumble of random text</p>
<p>More text</p>
など...
私は私が探しているテキスト(たとえば、「ランダム」)を見つけるまで、さまざまなランダムなテキストをすべて揃えることができるようにしたいと思います。このテキストはファイルのどこにでも配置できます。その後、変数を割り当てたいと思います。
Jumble of random text
その間のすべて:
<p> and </p>
これまで私はこれを持っています:
echo grep -i 'random' search.html | grep -o -P '(?<=<p>).*(?=</p>)' search.html
これはある程度機能しますが、段落タグの最初と最後の項目を探しているので、意味のない多くのデータが出力されます。つまり、この場合は次のようになります。
Jumble of random text
More text
どうすれば返すことができますか?
Jumble of random text
非常に混乱し、迅速に進行します。
答え1
一致するパターンが.*
呼び出されるからです。貪欲なマッチングつまり、返されるという意味です。最大検索パターンに一致する文字列です。
やりたいことは使うものです欲はない(または怠惰) マッチ、リターン最短パターンに一致する文字列です。グリディマッチングをからに変更するだけ.*
です.*?
。ただしgrep
、この機能は通常デフォルトではサポートされていませんが、-P
Perlと同様の正規表現一致を許可するオプションを使用して有効にすることはできます。
つまり、grepコマンドをgrep -o -P '(?<=<p>).*?(?=</p>)'
。
この回答の詳細については、次をご覧ください。https://stackoverflow.com/questions/3027518/non-greedy-grep