Sed regexp 仅匹配无效的 C++ 标识符字符来重命名变量

问题描述 投票:0回答:0

我想使用 sed 重命名变量名(标识符)。我想为 C++ 执行此操作,但对于其他语言,它会类似。假设我们有这样的代码示例: 示例.cpp

int s;
int n;
...//a lot of code with many occurences of n

出于某种原因,我想重命名 r 中的 n。问题是 n 可以作为其他单词的一部分出现。在 C++ 中,有效的标识符具有以下收据:

[[[:alpha:]]_]+[[[:alnum:]]_]
(将
ä
等扩展字符放在一边。我不知道 alnum 是否包含这些字符,但如果它们没有问题,则可能会期望扩展标点符号字符,但谁使用它们)

有效标识符旁边必须有一个不属于该表达式的字符,以将其与其他标识符区分开。因此,在

n
之前和之后不允许使用
[[[:alnum:]]_]
,而任何其他字符都可以。另一个问题是
""
中的字符串。仅当字符串始终在线时,这一切才有效。然后我们必须检查未转义的“的奇怪出现,如果我们可以使用正则表达式来做到这一点,这可能是一个数学问题,但是我第一次在没有字符串识别的情况下尝试这样做并没有达到这一点:

sed -i -e 's/\([^[[:alnum:]]_]\)n\([^[[:alnum:]]_]\)/\1r\2/g' example.cpp

它没有改变任何东西

c++ regex sed terminal identifier
© www.soinside.com 2019 - 2024. All rights reserved.