使用 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- 它使用\<\>单词边界标记来确保它仅在它本身是一个“单词”时才更改为oldnew而不仅仅是作为单词的一部分嵌入,如cold

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

-i如果您希望就地更改文件而不是打印到标准输出,请使用 GNU sed 的选项。

警告: 这个sed脚本会改变全部/\<old\>/源文件中出现 的情况。这可能比你想要改变的要多得多。

答案2

gnu sed:

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

相关内容