删除某些单词并将单词设置在文件中字符串的末尾

删除某些单词并将单词设置在文件中字符串的末尾

我有一堆文件,其中包含类似于以下内容的字符串:

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 个或多个字符,(更改为)

相关内容