我有一堆文件,其中包含类似于以下内容的字符串:
Get<1>(abc)
Get<2>(xyz)
如何递归搜索具有上述模式的所有文件并删除第一个“(”之前的所有内容并在之后放置一个字符串?
期望的输出:
abc.val()
xyz.val()
abc 和 xyz 可以更改为任何内容,“<”和“>”之间的数字并不重要。
编辑:
文件扩展名为 .cc 和 .h。
该字符串也始终以 Get 开头。
答案1
您可以使用 GNUgrep
查找至少包含一次该模式的文件,并使用 GNUsed
进行就地替换:
ere='Get<[[:digit:]]+>\(([[:alnum:]_]+)\)'
grep -rlEZe "$ere" . |
xargs -r0 sed -i -E "s/$ere/\1.val()/g"
这里[[:alnum:]_]+
匹配一个或多个字母数字字符或下划线的序列。[^()]*
对于除 或 之外的 0 个或多个字符,(
更改为)
。