如何编写 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 sed:
/bin/sed -ire \
's!\<old\(([^)]+), *([^) ][^)]*)\)!new(\2, \1)!g' \
*.c </dev/null