3

次のようなファイルにテキストがあります。

#include<stdio.h>
#include<stdlib.h>

#define MIN 0
#define MAX 100

最初の #define の前にマクロを挿入したい:

#include<stdio.h>
#include<stdlib.h>

#define MAXIMUM(a,b) \ 
(a>b?(return a):(return b))
#define MIN 0
#define MAX 100

sed で運を試してみましたが、それほど成功しませんでした。これは、次のように実行される add_macro.sh などの bash スクリプトで行う必要があります。

./add_macro file.c

含まれるもの:

var1="#define"
var2="#define MAXIMUM(a,b) \ /\n(a>b?(return a):(return b))"
sed "H;${x;s/$var1 .*\n/$var2&/;p;}" $1 > $1.tmp

上記のスクリプトを実行すると、次のようになります。

#include<stdio.h>
#include<stdlib.h>

#define MIN 0
#define MAX 100


#include<stdio.h>
#include<stdlib.h>

#define MAXIMUM(a,b)          //no '\' is printed
(a>b?(return a):(return b))
#define MIN 0
#define MAX 100

データを繰り返し、置換を 1 回だけ行います。どんな助けでも大歓迎です。

4

4 に答える 4

1
var1="#define"
var2='#define MAXIMUM(a,b) \\ \
    (a>b?(return a):(return b))'
sed "0,/^$var1/{/^$var1/s/$var1/$var2\n$var1/}" $1

または少し短い:

sed "0,/^$var1/s/^$var1/$var2\n$var1/" $1
于 2013-06-13T08:10:30.433 に答える
0

わかった:

var2='#define MAXIMUM(a,b) \\\n(a>b?(return a):(return b))'
var1='#define'
sed "H; 0,/^$var1 .*/s//$var2\n&/1;" $1 > $1.tmp

ご意見ありがとうございます。

于 2013-06-13T08:56:20.700 に答える