如何搜索单词并为下一个单词添加后缀?

时间:2016-12-01 20:43:16

标签: c parsing awk sed

我有一个文件foo.h 该文件有一些宏,它们重复两次。我想添加一个后缀' _repeat'到下一次出现。 文件中有很多这样的重复。我想编写一个通用脚本来为第二次出现添加后缀。

例如。

/* Info: VARIABLE */

#define VARIABLE 02

我希望它看起来像,

/* Info: VARIABLE */

#define VARIABLE_repeat 02

4 个答案:

答案 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