[unix] sed를 사용하여 문자열에서 마지막으로 나타나는 문자를 바꾸려면 어떻게합니까?

문자열에서 마지막으로 나타나는 “-“만 공백으로 바꾸려면 어떻게합니까 sed?

예를 들면 다음과 같습니다.

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

그러나 다음과 같은 결과를 얻고 싶습니다 (마지막 하이픈 [“-“]을 공백으로 바꿈)

swp-RedHat-Linux-OS-5.5.0.0 03



답변

싱글로 할 수 있습니다 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


답변

bash 매개 변수 확장으로 이것을 처리 할 수도 있습니다 .

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

산출:

swp-RedHat-Linux-OS-5.5.0.0 03


답변

더 좋은 방법이 있다고 확신하지만 이와 같은 것이 나를 위해 일했습니다.

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


답변