gpt4 book ai didi

linux - 根据 grep 的输出动态替换程序的内容

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:55 25 4
gpt4 key购买 nike

a.cpp

int main()
{
bool b;
bool c = true;

bool d;
bool e ;
bool f ;

int x = 3;

std::cout << "x is " << x << std::endl;
return 0;
}

grepping 查找具有未定义的 bool 变量的 c 文件。

grep -rn --include \*.cpp --include \*.c bool | grep -v 'svn\|virtual\|::' | grep 'bool\([ ]\+[A-Z0-9a-z_]*[ ]*\);'

输出

a.cpp:3:        bool b;
a.cpp:6: bool d;
a.cpp:7: bool e ;
a.cpp:8: bool f ;

现在我想将这些行修改为

bool b=false;
bool d=false;
bool e=false;
bool f=false;

使用命令。

有人可以建议一种方法吗?谢谢

最佳答案

以下命令将直接在文件中替换并创建备份文件名。没有扩展名的BAK、-i.BAK-i不备份。

directory_path 必须替换为路径 (如果是当前路径)

find directory_path \( -name '*.c' -o -name '*.cpp' \) -exec perl -i.BAK -pe '
s/^(\s+bool\s+\w+)\s+(;)\s+$/$1=false$2/
' {} +

出现问题时恢复

find directory_path -name '*.BAK' -exec bash -c 'mv $1 ${1%.BAK}' -- {} \;

删除.BAK

find directory_path -name '*.BAK' -exec rm {} +

注意:find +\; 的最后一个参数的区别在于,最后一个 {} find 将使用 + fork 更少的进程,因为 {} 将被替换为命令行可以包含的尽可能多的参数(如 xargs)。

关于linux - 根据 grep 的输出动态替换程序的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com