답변:
싱글로 할 수 있습니다 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
sed -r
.
sed -r 's/(.*)-(.*)-/\1 \2 /')
.
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
bash
매개 변수 확장 기능에 대한 감사를 보여 주며 OP가 사용 중일 bash
때도 잘 작동합니다 . 가독성 (매우 장황한 시점까지)과 올바른 도구 사용 사이에는 미묘한 균형이있을 수 있지만 올바른 도구를 사용하지 않는 것보다 더 자주 사용됩니다.
sed
패턴 일치를 지원하지 않습니다. 이 경우 다른 것이 필요perl -pne 's/(.*)-/$1 /'
하거나 @Thor의 매개 변수 확장 솔루션 또는 다른 것이 필요합니다.