linux + sed - 仅替换字符串最右侧的字符

linux + sed - 仅替换字符串最右侧的字符

我有一台 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 中执行此类操作。

相关内容