1

我想在所有文件中递归地用另一条指令替换包含括号的特定指令。

例如,

mov r1, [r1, r2]

sub [r8, r9], r10

当我使用

 sed -i.bak "s/mov r1, [r1, r2]/sub [r8, r9], r10/g" file.S

它不起作用。

我怎样才能做到这一点?

4

3 回答 3

4

两件事情。

  1. 您需要对匹配表达式中的括号进行转义,它们在正则表达式中具有特殊含义。
  2. 您应该保护 sed 脚本免受 shell 扩展。使用双引号会强制展开。单引号关闭扩展。

因此:

's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g'

在制定正确的脚本时,您也许可以跳过内联编辑。像这样:

sed 's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g' file.S
于 2012-06-13T09:09:50.140 回答
2

尝试使用转义括号's/mov r1, \[r1, r2\]/sub \[r8, r9\], r10/g'

于 2012-06-13T09:08:19.563 回答
0

在 sed 的替换命令中转义括号 -- [ ] -- 将按照您期望的方式处理您的文件。这是用括号转义的命令重写的:

sed 's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g' file.S
于 2012-06-13T12:19:30.653 回答