Регулярное выражение для поиска / замены текста различной длины - PullRequest
1 голос
/ 27 мая 2020

В нашем проекте мы используем стороннее программное обеспечение. Между двумя основными выпусками поставщик решил ограничить доступ к одному из методов и предоставил альтернативное имя метода с другой подписью. Пример, как показано ниже

Object obj;

Old way: Method_A(obj);

New way: obj.Method_B();

Можно ли использовать регулярное выражение с linux sed для поиска / замены?

Например:

Method_A ( ab c ); ==> ab c .Method_B ​​();

Method_A ( m ); ==> m .Method_B ​​();

Метод_A ( xyz123 ); ==> xyz123 .Method_B ​​();

Это то, что я пробовал до сих пор:

grep -R "Method_A(" . | sed -i 's/Method_A(^.{1,50}$/_____.Method_B(/g"

Независимо от того, что я пытаюсь указать для _____, я не могу достичь желаемого результата.

1 Ответ

0 голосов
/ 02 июня 2020

Вы можете использовать следующее регулярное выражение POSIX BRE sed:

sed 's/Method_A( \(.*\) );/\1.Method_B();/g'

Если вам нужно применить символы от 1 до 50 между ( и );, используйте

sed 's/Method_A( \(.\{1,50\}\) );/\1.Method_B();/g'

Подробности

  • Method_A( - соответствует Method_A( подстроке
  • \(.*\) - Группа захвата 1 (на которую ссылается \1 обратная ссылка в части шаблона замены): любые 0 или более символов, как можно больше
  • ); - ); подстрока

См. онлайн sed демо :

sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( abc );' # ==> abc.Method_B();
sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( m );' # ==> m.Method_B();
sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( xyz123 );' # ==> xyz123.Method_B();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...