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

2つのこと。

  1. 一致式の角かっこはエスケープする必要があります。正規表現では特別な意味があります。
  2. sedスクリプトをシェル拡張から保護する必要があります。二重引用符を使用すると、拡張が強制されます。一重引用符は拡張をオフに切り替えます。

したがって:

'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のsubstituteコマンドで角かっこ-[]-をエスケープすると、ファイルが期待どおりに処理されます。角かっこをエスケープして書き直したコマンドは次のとおりです。

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