我有一个文件foo.h 该文件有一些宏,它们重复两次。我想添加一个后缀' _repeat'到下一次出现。 文件中有很多这样的重复。我想编写一个通用脚本来为第二次出现添加后缀。
例如。
/* Info: VARIABLE */
#define VARIABLE 02
我希望它看起来像,
/* Info: VARIABLE */
#define VARIABLE_repeat 02
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed -r '/VARIABLE/{:a;N;/(VARIABLE).*\1/!ba;s//&_repeat/}' file
在遇到所需的字符串时收集行,直到匹配第二个出现,然后附加后缀。
答案 1 :(得分:1)
awk '($1=="#define"){a[$2]++}(a[$2]==2){$2=$2 "_repeat"}1' data.txt
答案 2 :(得分:1)
绝对不能保证稳健性,但你可以从:
开始awk '$1 == "#define" && a[$2]++{ $2=$2 "_repeat" a[$2]} 1' foo.h
这将处理多次重复,将“_repeat2”,“_repeat3”等附加到重复项。
答案 3 :(得分:1)
这里的perl版本 - 至少对我来说 - 似乎更容易理解:
float: left
或此处的另一个版本:
perl -p -e 's/(#define\s+)(\w+)/"$1$2".(++$w{$2} > 1 ? "_repeated" : "")/e' < foo.h