linux + sed – 只replacestring的最右侧字符

我有Linux机器红帽5.1

如何只replace正确的单个字符(string的大部分)

例如从我的sed语法(不好,因为它取代了“a”字符)l

echo machine1a | sed s'/a/b/g' mbchine1b 

但要求的答案应该是 – machine1b而不是mbchine1b

您可以使用模式结束模式。 模式$匹配模式空间末尾的空string。 有了这个模式,你可以避免使用上面的build议。

  $ echo machine1a | sed 's/a$/b/' machine1b 
 % echo machine1a | rev | sed s'/a/b/' | rev machine1b 

我无法find与sed单独做到这一点的方法。 有一个标志的s操作指定只replace第N个匹配,但从结束计数不起作用。

 % echo machine1a | sed s'/a/b/2' machine1b 

这是不可能的使用一个简单的sedexpression式。 相反,做这样的事情即。 使用bash的string操作function:

 var=machine1a; echo "${var%?}b" 

但是如果你真的需要sed,那么你可以运行下面的命令:

 echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g' 

对不起以上混淆,说这是不可能的。 我通常在bash中使用bash的string处理function来做这种东西。