使用 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

相關內容