sed での非貪欲 (消極的) 正規表現マッチング? 質問する

sed での非貪欲 (消極的) 正規表現マッチング? 質問する

sed を使用して URL の行をクリーンアップし、ドメインだけを抽出しようとしています。

つまり:

http://www.suepearson.co.uk/product/174/71/3816/

欲しい:

http://www.suepearson.co.uk/

(末尾のスラッシュの有無は関係ありません)

私が試してみました:

sed 's|\(http:\/\/.*?\/\).*|\1|'

そして(非貪欲な量指定子を回避)

sed 's|\(http:\/\/.*\?\/\).*|\1|'

しかし、非貪欲な量指定子 ( ?) が機能しないようで、常に文字列全体が一致してしまいます。

ベストアンサー1

基本的な Posix/GNU 正規表現も拡張された Posix/GNU 正規表現も非貪欲な量指定子を認識しないので、後続の正規表現が必要になります。幸いなことに、このコンテキストの Perl 正規表現は非常に簡単に入手できます。

perl -pe 's|(http://.*?/).*|\1|'

おすすめ記事