string - 使用 Bash/Perl 根据每个文件的名称修改文件

标签 string perl bash oop substitution

我有几百个文件,它们都包含同一类“Process”的变体。我的意图是使每个类成为某个基类“BaseProcess”的派生类。 每个文件都已手动重命名为“Process_XXX”之类的名称,我正在尝试找到一种方法来遍历每个文件并更改每次出现的文件,例如:

class Process {
    stuff;
}

class Process_XXX : public BaseProcess {
    stuff;
}

其中 XXX 取自正在更改的特定文件。这可能使用 Bash 或 Perl 脚本吗?还是最好手动进行? 干杯 jack

最佳答案

我将添加一个考虑文件扩展名的答案(添加我建议的更改 answerfedorqui )以及 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 XXXAlertGenerator 。我正在使用两个 \(...\) 来提取匹配项并将它们用于替换模式中作为 \1\2(在 info sed 中称为 back references)。

关于string - 使用 Bash/Perl 根据每个文件的名称修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788236/

相关文章:

c# - 在格式化字符串中提取一些值

perl - 需要帮助理解脚本的一部分(全局和引用)

linux - 如何检查输入是否为空格和空值?

bash - 使用 ffmpeg 的 bash 查找循环中的尴尬行为

linux - 如何使用 Perl 打印到文本文件?

javascript - Bash 脚本/正则表达式将多行变量声明转换为单语句

string - 从标准输入读取时,Nil指针取消引用行为

java - 在java中删除字符串中多次出现的字符的最佳方法是什么

string - 我可以重新定义 String#length 吗?

perl - 为什么我的 LWP::UserAgent 凭据不起作用?