Рефакторинг кода с использованием sed

Рефакторинг кода с использованием sed

Как написать скрипт sed, который переставляет/рефакторит строку символов файла?

Содержимое моего файла:

    for(int i=0; i<old(a, 10); i++)
    {
      sum += old(c*c, i*a)
    }

И я хочу, чтобы измененное содержимое выглядело так:

    for(int i=0; i<new(10,0,a); i++)
    {
      sum += new(i*a, c*c)
    }

решение1

Следующий код работает с GNU sed— он использует маркеры границ слов \<и \>, чтобы гарантировать, что он изменяется oldна только newтогда, когда он сам по себе является «словом», а не просто встроен как часть слова, например cold.

$ sed -e 's/\<old\>/new/g' foo.c 
    for(int i=0; i<new(a, 10); i++)
    {
      sum += new(c*c, i*a)
    }

Используйте опцию GNU sed, -iесли вы хотите, чтобы файл изменялся на месте, а не выводился на стандартный вывод.

ПРЕДУПРЕЖДЕНИЕ: Этот sedсценарий изменитсяВСЕвхождения /\<old\>/в исходном файле. Это может быть гораздо больше, чем вы хотите изменить.

решение2

gnu sed:

/bin/sed -ire \
 's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
 *.c </dev/null

Связанный контент