bash从字符串末尾替换一个字符

时间:2017-03-12 17:52:38

标签: string bash shell replace

我需要将最后一个点替换为字符' - '在字符串中。

SELECT DISTRIBUTOR,
  MIN(MOVIE_TITLE) KEEP (DENSE_RANK FIRST ORDER BY MONEY_MADE ASC) AS MOVIE_TITLE
FROM MOVIE
GROUP BY DISTRIBUTOR;
DISTRIBUTOR  MOVIE_TITLE  
Fox          Aliens       
Orion        RoboCop      

使用以下表达式:

KEEP

我希望得到:

RANK

但是我得到了

# a='2.5.2.pl'

我注意到只有当我需要从头到尾替换点时它才起作用。为什么会这样? 当然我可以使用像awk这样的外部程序来解决这个问题,但我只需要使用bash解决问题。

感谢您的建议!

2 个答案:

答案 0 :(得分:5)

使用bash的Parameter Expansion

a='2.5.2.pl'
echo "${a%.*}-${a##*.}"

输出:

2.5.2-pl

答案 1 :(得分:0)

我的方式有点hacky并且使用rev但我测试了它并且它有效!

echo "$(_b=$(echo "$a" | rev); _b=${_b/./-}; echo "$_b" | rev)"

基本上,我只是颠倒了字符顺序,因此最后.是第一个,然后使用${var/./-}用短划线替换点,最后再次颠倒了字符的顺序。