我正在尝试使用sed替换文件中的块,但没有成功。
E.g。 我想替换它:
for(int i = 0; i < MAX_LOOPS; ++i) {
printf("Hello World!");
}
有了这个:
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i;
}
答案 0 :(得分:1)
以下将以非常基本的方式进行操作,即它不健壮,也不担心格式化。
s / for(int i = 0; i&lt; MAX_LOOPS; ++ i)/ int i = 0; \ nwhile(i&lt; MAX_LOOPS)/ g / printf(“Hello World!”); / { 一个++ I; }
这只是一个快速的黑客,但它应该足以让你去。 Sed可能不是这项工作的最佳工具,但知道如何在Sed中做到这一点并没有什么坏处。
答案 1 :(得分:0)
这可能对您有用:
sed -e '/^for.* {/,/^}/{/for/{i\int i = 0;'\
> -e ';c\while(i < MAX_LOOPS) {'\
> -e '}};/^}/i\++i' file
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i
}
答案 2 :(得分:0)
sed -r '
/for\s*\(.*;.*;.*\)/!b
s#.*\((.*);(.*);(.*)\).*#\1\nwhile (\2) {\a\3#
h
s/.*\a//
x
s/\a.*//
:X
N
/}/!{bX}
G
s#(.*)\n(.*)\n(.*)#\1\n \3\n\2#
' file
int i = 0
while ( i < MAX_LOOPS) {
printf("Hello World!");
++i
}
答案 3 :(得分:0)
sed -e '
/for(int i = 0; i < MAX_LOOPS; ++i) {/,/}/ {
/}/ a \
int i = 0;\
while(i < MAX_LOOPS) {\
printf("Hello World!");\
++i;\
}
d
}
' YourFile
它使用输入和ouptut之间的不同行为。将发送信息附加到输出而不将此信息放入当前工作缓冲区(通过输入和模拟提供),因此删除不能触摸此信息,但输入(此处的当前行} )被很好地触摸