グループと一致するようにsedを取得できません

グループと一致するようにsedを取得できません

私は次のことをしようとしています:

echo "/Users/anon/Applications/Chrome Apps.localized/Spotify.app" |
 sed -E 's:([^\/]*$).*:\1:'

文字列全体をキャプチャして置き換えると思いましたが、うまくいきませSpotify.appんでした。代わりに文字列全体を返します。

だから私の正規表現が間違っている可能性があると思ってテストするために、私は次のことをしました。

echo "/Users/anon/Applications/Chrome Apps.localized/Spotify.app" |
 sed 's:[^\/]*$:PWA.app:' 

ただし、予想される結果は次のとおりです/Users/anon/Applications/Chrome Apps.localized/PWA.app

だからここで何が間違っているのかわかりません。グループ化するときに同じ正規表現が一致しないのはなぜですか?

ベストアンサー1

必要以上に複雑にしています。

sed -e 's:.*/::'

貪欲な正規表現が代わりに機能するようにしてください。.*すぐに文字列の終わりを通過しますが、ハードスラッシュと一致する必要があるため、正規表現エンジンは逆追跡を開始し、/を探して戻りに最初に会う/で停止します。 => 文字列の最後のスラッシュです。この点までのみ削除し、最後のスラッシュと文字列の終わり以降のすべての内容を暗黙的に残します。

おすすめ記事