sedを使用して文字列内の最後の文字を置き換える方法は?

sedを使用して文字列内の最後の文字を置き換える方法は?

文字列の最後の "-"だけをスペースに置き換えるにはどうすればよいですかsed

たとえば、

echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03

しかし、次の出力を取得したいと思います。 (最後のハイフン["-"]を空白に置き換えます)

swp-RedHat-Linux-OS-5.5.0.0 03

答え1

これを使用してこれを実行できますsed

sed 's/\(.*\)-/\1 /'

または拡張正規表現を使用してください。

sed -r 's/(.*)-/\1 /'

要点は、欲が非常に多いので、他のキャラクターを含め、以前のキャラクターをできるだけ多くsed一致させるということです。--

$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03

答え2

次の方法でこの問題を処理することもできます。Bash パラメータ拡張:

s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}

出力:

swp-RedHat-Linux-OS-5.5.0.0 03

答え3

より良い方法があると確信していますが、このようなものが私にとって効果的です。

echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03

関連情報