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を使用して、が単独で「単語」である場合にのみ に変更され、 のように単語の一部として埋め込まれている場合にのみに変更されるようにします。\<\>oldnewcold

$ 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 セッド:

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

関連情報