使用ubuntu中的sed命令搜索并删除块

时间:2012-09-21 14:39:05

标签: bash vim sed vi replace

我想要执行的是1-查找并删除(__ c64)的整个定义块:

unsigned long long __c64(unsigned int llvm_cbe_hi, unsigned int llvm_cbe_lo) {
unsigned long long llvm_cbe_retval;    /* Address-exposed local */
unsigned long long llvm_cbe_retval1;



  *(&llvm_cbe_retval) = (((((unsigned long long )(unsigned int )llvm_cbe_hi)) << 32ul) |  (((unsigned          long long )(unsigned int )llvm_cbe_lo)));
  llvm_cbe_retval1 = *(&llvm_cbe_retval);
  return llvm_cbe_retval1;
}

除项目中的一个.c文件外。因为在.o到可执行文件的编译阶段,我得到了错误“__c64的多重定义”,我想删除所有这些但只有一个才能解决问题。

有什么想法吗?

此致

阿米尔

2 个答案:

答案 0 :(得分:0)

如果所有文件中的功能布局完全相同,您可以试试这个

gvim -p *.c    // Open all relevant files in multiple tabs

然后执行此

:bufdo %s/unsigned long long __c64\(.\+\n\)\+\(\n\)\+\(.\+\n\)\+}// | update

最后执行的“更新”将保存每个文件。

答案 1 :(得分:0)

我发现这些定义是动态变化的,我试图找出类似的东西:

sed '/^unsigned long long __c64/,/}/d'

幸运地工作了。

感谢所有帮助。

阿米尔