sedを使用してファイル内のブロックを置き換えようとしていますが、成功しません。sedのブロック置換
など。 私はこの置き換えたい:以下は、トリックを行いますが、非常に基本的な方法で、すなわち、それは堅牢ではありませんもそれはフォーマットで心配ない
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i;
}
sedを使用してファイル内のブロックを置き換えようとしていますが、成功しません。sedのブロック置換
など。 私はこの置き換えたい:以下は、トリックを行いますが、非常に基本的な方法で、すなわち、それは堅牢ではありませんもそれはフォーマットで心配ない
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i;
}
:これにより
for(int i = 0; i < MAX_LOOPS; ++i) {
printf("Hello World!");
}
を。
S /について(I = 0をint型;私< MAX_LOOPS; ++ i)は/ INT I = 0; \のnwhile(I < MAX_LOOPS)/グラム /のprintf( "Hello Worldの!");/{ a ++ i; }
これはちょうど速いハックですが、それはあなたを動かすのに十分であるはずです。 Sedはこの仕事のための最善のツールではないかもしれませんが、Sedでそれを行う方法を知っても害はありません。
このあなたのために働くかもしれない:
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
}
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
}
sed -e '
/for(int i = 0; i < MAX_LOOPS; ++i) {/,/}/ {
/}/ a \
int i = 0;\
while(i < MAX_LOOPS) {\
printf("Hello World!");\
++i;\
}
d
}
' YourFile
入力と出力の間で異なる動作を使用します。この情報を現在の作業バッファに入れずに(出力と入力)、削除はこれに触れることはできませんが、入力(現在の行)はです)
なぜあなたはために?私にとっては、読みやすさと保守性の大幅な低下があるようです。 – hlovdal
ここでの難しさは、while(){}ループ内で必要なものです。単純な命令の場合は1つですが、ネストされたブロックなどの場合は別のものです。 – Beano