Eytan Asked: 2012-05-15 14:33:57 +0800 CST2012-05-15 14:33:57 +0800 CST 2012-05-15 14:33:57 +0800 CST linux + sed - 只替换字符串最右边的字符 772 我有 linux 机器 red-hat 5.1 如何只替换正确的单个字符(字符串的最边) 来自我的 sed 语法的示例(不好,因为它替换了两个“a”字符)l echo machine1a | sed s'/a/b/g' mbchine1b 但请求的答案应该是 - machine1b 而不是 mbchine1b linux sed 3 个回答 Voted Best Answer Dmitri Chubarov 2012-05-15T15:31:42+08:002012-05-15T15:31:42+08:00 您可以使用模式空间结束模式。该模式$匹配模式空间末尾的空字符串。使用此模式,您可以避免rev按照上面的建议使用。 $ echo machine1a | sed 's/a$/b/' machine1b mgorven 2012-05-15T14:58:14+08:002012-05-15T14:58:14+08:00 % echo machine1a | rev | sed s'/a/b/' | rev machine1b 我找不到单独使用 sed 来做到这一点的方法。s 操作有一个标志指定只替换第 N 个匹配项,但从末尾开始计数不起作用。 % echo machine1a | sed s'/a/b/2' machine1b milosgajdos 2012-05-15T14:58:51+08:002012-05-15T14:58:51+08:00 这是不可能使用一个简单的 sed 表达式。而是做这样的事情,即。使用 bash 的字符串操作功能: var=machine1a; echo "${var%?}b" 但是如果你真的需要 sed 那么你可以运行以下命令: echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g' 抱歉,上面的混淆是不可能的。我通常使用 bash 的字符串处理功能在 bash 中执行此类操作。
您可以使用模式空间结束模式。该模式
$
匹配模式空间末尾的空字符串。使用此模式,您可以避免rev
按照上面的建议使用。我找不到单独使用 sed 来做到这一点的方法。s 操作有一个标志指定只替换第 N 个匹配项,但从末尾开始计数不起作用。
这是不可能使用一个简单的 sed 表达式。而是做这样的事情,即。使用 bash 的字符串操作功能:
但是如果你真的需要 sed 那么你可以运行以下命令:
抱歉,上面的混淆是不可能的。我通常使用 bash 的字符串处理功能在 bash 中执行此类操作。