2016-12-01 7 views
0

私はファイルfoo.hを持っています ファイルにはいくつかのマクロがあり、それらは2回繰り返しています。私は次のオカレンスに接尾辞 '_repeat'を追加したいと思います。 このような繰り返しがファイルに多数あります。私は、サフィックスを2番目の発生に追加するための汎用スクリプトを書いています。単語を検索し、次の単語に接尾辞を追加するには?

たとえば、

/* Info: VARIABLE */ 

#define VARIABLE 02 

私は(GNUのSED)これはあなたのために働くかもしれない

/* Info: VARIABLE */ 

#define VARIABLE_repeat 02 

答えて

1

、それが見えるようにしたい:

sed -r '/VARIABLE/{:a;N;/(VARIABLE).*\1/!ba;s//&_repeat/}' file 

は、第二出現するまでに必要な文字列に遭遇した上に線を集めてそれにマッチした後に接尾辞を追加します。

1
awk '($1=="#define"){a[$2]++}(a[$2]==2){$2=$2 "_repeat"}1' data.txt 
1

堅牢性の一切の保証はなく、あなたが開始できます。これは重複に "_repeat2"、 "_repeat3" などを追加し、複数の繰り返しを処理する

awk '$1 == "#define" && a[$2]++{ $2=$2 "_repeat" a[$2]} 1' foo.h 

1

ここではPerlのバージョンだ - 私には、少なくとも - 理解することがはるかに簡単に思える:

perl -p -e 's/(#define\s+)(\w+)/$x='_repeated' if ++$w{$2} > 1; "$1$2$x"/e' < foo.h 

perl -p -e 's/(#define\s+)(\w+)/"$1$2".(++$w{$2} > 1 ? "_repeated" : "")/e' < foo.h 

またはここでは別のバージョンですが、

関連する問題