【发布时间】:2012-01-06 04:52:58
【问题描述】:
我在一个多级目录中有几个源代码文件,其中包含对函数的前向声明
extern "C" void myPrintf(char *fmt, ...);
我想从所有文件中删除此声明。 我可以做一个 grep 打印包含所有文件的声明的行,但不确定如何使用 sed 管道来获得所需的结果。
【问题讨论】:
我在一个多级目录中有几个源代码文件,其中包含对函数的前向声明
extern "C" void myPrintf(char *fmt, ...);
我想从所有文件中删除此声明。 我可以做一个 grep 打印包含所有文件的声明的行,但不确定如何使用 sed 管道来获得所需的结果。
【问题讨论】:
使用 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 /some/path -type f -name "*.c" -exec sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' {} \;
【讨论】:
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
【讨论】: