我有几百个文件,它们都包含同一类“Process”的变体。我的意图是使每个类成为某个基类“BaseProcess”的派生类。 每个文件都已手动重命名为“Process_XXX”之类的名称,我正在尝试找到一种方法来遍历每个文件并更改每次出现的文件,例如:
class Process {
stuff;
}
到
class Process_XXX : public BaseProcess {
stuff;
}
其中 XXX 取自正在更改的特定文件。这可能使用 Bash 或 Perl 脚本吗?还是最好手动进行? 干杯 jack
最佳答案
我将添加一个考虑文件扩展名的答案(添加我建议的更改 answer 的 fedorqui )以及 DVK's 的改进answer :
for SUFFIX in cc h java txt; do
for file in *.$ext; do
sed -i.bak "s#^\\(\\s*class\\s\\+Process\\)\\(\\s*{\\)#\\1_${file/%.$SUFFIX} : public BaseProcess\2#g" $file
done
done
该模式的示例是 s#^\(\s*class\s\+Process\)\(\s*{\)#\1_AlertGenerator : public BaseProcess\2#g
XXX
为 AlertGenerator
。我正在使用两个 \(...\)
来提取匹配项并将它们用于替换模式中作为 \1
和 \2
(在 info sed
中称为 back references
)。
关于string - 使用 Bash/Perl 根据每个文件的名称修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788236/