如何用另一个char替换bash中字符串的最后一个char

时间:2018-02-12 10:00:56

标签: bash

我有代表版本的字符串(总是采用以下格式):

1.0.0
1.1.0
1.5.0
20.189.0
456874.0.0

字符串的最后一部分始终为.0。 现在我正在搜索bash中的一种方法,我可以用.X

替换它
1.0.X
1.1.X
9.5.X
20.189.X
...

6 个答案:

答案 0 :(得分:5)

sed -i 's/.$/X/' filename

它将在每行中用X替换最后一个字符,重写文件filename

答案 1 :(得分:3)

使用bash操作:

str='1.0.0'

echo "${str/%.0/.X}"
1.0.X

或者:

echo "${str%.0}.X"
1.0.X

答案 2 :(得分:0)

如果字符串在文件file中:

$ cat file
1.0.0
456874.0.0
1.1.666

(注意上面的最后一个)

$ for s in $(cat file) ; do echo ${s%.*}.X ; done
1.0.X
456874.0.X
1.1.X

答案 3 :(得分:0)

由于我们有bash,我们也可以使用超简单的“索引到最后一个char并替换它,例如。

str=1.0.0

要索引你使用的最后一个字符${str:0:$((${#str}-1))}(只是str:0:to_last-1),所以要替换最后一个字符,你只需在最后添加新的最后一个字符,例如

$ str=1.0.0
$ echo ${str:0:$((${#str}-1))}X
1.0.X

在bash中总有多种方法可以使用skin-the-cat。

(就个人而言,我会使用参数扩展和子串删除 - 但这些已经被采用了......)

答案 4 :(得分:0)

非常简单的方法是

str=testString
echo ${str%?}X

它只选择没有最后一个字符的字符串,并将X作为尾随字符附加

答案 5 :(得分:0)

将 IP 地址中的最后一个数字替换为 1

$ hostname -i | sed 's/.$/1/'

用“z”替换“t”

$ echo "xyt" | sed 's/.$/z/'