Вопрос по search, sed, replace – Как заменить текстовый шаблон, содержащий скобки?

1

Я хочу заменить определенную инструкцию, содержащую скобки, на другую инструкцию рекурсивно во всех файлах.

Например,

mov r1, [r1, r2]

с

sub [r8, r9], r10

Когда я использую

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

это не работает.

Как я могу это сделать?

Ваш Ответ

3   ответа
2

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

Благодарю. Это помогает user997487
4

You need to escape the brackets in the match expression, they have special meaning in regular expressions. You should protect the sed script from shell expansion. Using double quotes forces expansions. Single quotes switches expansion off.

Таким образом:

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

При разработке правильного сценария вы можете просто пропустить встроенное редактирование, возможно. Вот так:

sed 's/mov r1, \[r1, r2\]/sub [r8, r9], r10/g' file.S
Я хочу заменить переменную вместо константной строки, т.е. я хочу, чтобы оболочка развернула команду. строка = "mov r1, [r1, r2]" sed '' s / $ string / $ replace_string / g ';' file.S. user997487
Спасибо вам большое! user997487
0

ть ваш файл так, как вы ожидаете. Вот ваша команда, переписанная со снятыми скобками:

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

Похожие вопросы