![sed を使用してコードをリファクタリングする](https://rvso.com/image/76408/sed%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B.png)
ファイルの文字列を並べ替え/リファクタリングする 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)
}
-i
標準出力に出力するのではなく、その場でファイルを変更する場合は、GNU sed のオプションを使用します。
警告: このsed
スクリプトは変更されます全てソース ファイル内のの出現/\<old\>/
。これは、変更したい数よりはるかに多い可能性があります。
答え2
GNU セッド:
/bin/sed -ire \
's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
*.c </dev/null