あなたの主な問題は、 / を使用しようとしていることです / の場合、セパレータとして も解析する文字です。
パイプなど、別のセパレータを使用する必要があります。すべてと / に一致 、次に \( を使用します と \) (グループをキャプチャ) 抽出したい部分を区切って \1 を使用 、そのグループをレンダリングします:
echo "yourstring" | sed 's|.*/\([^/]*\)$|\1|'
キャプチャ グループがなくても機能する場合があります。最後の / まですべてをドロップするだけです。 :
echo "yourstring" | sed 's|.*/||'
basename を使用しない理由 このため?例:
for file in *mp3; do basename "$file"; done