Проблема использования 'sed' для редактирования кода

Вы можете написать регулярное выражение для поиска, соответствующего вашим требованиям:

find. -regextype egrep -regex './foo[^/]*bar/quux[A-Z](\.bak)?/pic[0-9][0-9][0-9][0-9][^/]?\.jpg'
0
04.11.2019, 20:04
2 ответа

Один из аргументов во второй строке — i%a. Это не будет соответствовать вашему регулярному выражению, потому что вы не включили %в свой класс символов [-a-zA-Z 0-9./*+]. Попробуйте

sed 's/oldmethod(\([-a-zA-Z 0-9./*+%]*\),\([-a-zA-Z 0-9./*+%]*\))/newmethod(\2, 0, \1)/'

Вы можете найти дополнительные экземпляры, использующие другие символы, которые вы не рассматривали, такие как _в именах переменных или (и )во вложенных вызовах других функций. Вам придется продолжать расширять подвыражение по мере того, как вы сталкиваетесь с таким использованием.

1
28.01.2020, 02:39

Более общая возможность:

sed -E 's/old([^,]*\()([^,])*, ([^)]*)\);/new\1\3, 0, \2);/' file

Выход:

for(int i=0; i<newmethod(7, 0, a); i++) {
  sum += newmethod(i%a, 0, b*b+i-3);
0
28.01.2020, 02:39

Теги

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