如何替换包含括号的文本模式?

时间:2012-06-13 09:00:20

标签: search sed replace

我想在所有文件中以递归方式替换包含括号的特定指令。

例如,

mov r1, [r1, r2]

sub [r8, r9], r10

当我使用

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

它不起作用。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

两件事。

  1. 您需要转义匹配表达式中的括号,它们在正则表达式中具有特殊含义。
  2. 您应该保护sed脚本不受shell扩展的影响。使用双引号强制扩展。单引号可以关闭扩展。
  3. 因此:

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

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

    sed 's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g' file.S
    

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

sed 's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g' file.S