我有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来做这种东西。