我有一台 Linux 机器 Red Hat 5.1
如何仅替换正确的单个字符(字符串的最侧)
来自我的 sed 语法的示例(不好,因为它替换了两个“a”字符)l
echo machine1a | sed s'/a/b/g'
mbchine1b
但要求的答案应该是 -机器1b 而不是 mbchine1b
答案1
您可以使用模式空间结尾模式。该模式与$
模式空间结尾处的空字符串匹配。使用此模式,您可以避免使用rev
上述建议。
$ echo machine1a | sed 's/a$/b/'
machine1b
答案2
% echo machine1a | rev | sed s'/a/b/' | rev
machine1b
我找不到单独使用 sed 来执行此操作的方法。s 操作有一个标志指定仅替换第 N 个匹配项,但从末尾开始计数不起作用。
% echo machine1a | sed s'/a/b/2'
machine1b
答案3
使用一个简单的 sed 表达式无法做到这一点。相反,请执行以下操作,即使用 bash 的字符串操作功能:
var=machine1a; echo "${var%?}b"
但如果您确实需要 sed,那么您可以运行以下命令:
echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g'
抱歉,上面说的“这是不可能的”,造成了混淆。我通常使用 bash 的字符串处理功能在 bash 中执行此类操作。