2

sedを使用してファイル内のブロックを置き換えようとしていますが、成功しません。

たとえば、これを置き換えたい:

for(int i = 0; i < MAX_LOOPS; ++i) {
    printf("Hello World!");
}

これとともに:

int i = 0;
while(i < MAX_LOOPS) {
    printf("Hello World!");
    ++i;
}
4

4 に答える 4

1

以下はトリックを行いますが、非常に基本的な方法です。つまり、堅牢ではなく、フォーマットを気にしません。

s/for(int i = 0; i < MAX_LOOPS; ++i)/int i = 0;\nwhile(i < MAX_LOOPS)/g /printf("Hello World!");/{ a++i; }

これは簡単なハックですが、これで十分です。Sed はこの作業に最適なツールではないかもしれませんが、Sed での方法を知っていても問題ありません。

于 2009-05-23T14:27:21.343 に答える
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
}
于 2017-01-23T13:29:35.153 に答える