我在多级目录中有几个源代码文件,其中包含对函数的前向声明
extern "C" void myPrintf(char *fmt, ...);
我想从所有文件中删除此声明。 我可以做一个grep,打印包含所有文件声明的行,但不知道如何用sed管道它以获得所需的结果。
答案 0 :(得分:1)
使用GNU sed
sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' *.c
如果要以递归方式执行此操作,您有两种选择:
使用Bash 4.X
shopt -s globstar; sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' **.c
使用find
find /some/path -type f -name "*.c" -exec sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' {} \;
答案 1 :(得分:0)
awk
:awk '/void myPrintf/{next}1' oldfile > newfile
对于 批量更新 ,您可以执行以下操作 -
find /path/to/files -type f -iname "*.c" | while read file; do
awk '/void myPrintf/{next}1' "$file" > "$file".new
mv "$file".new "$file"
done