使用grep&amp ;;从多个文件中删除一行SED

时间:2012-01-06 04:52:58

标签: shell sed grep

我在多级目录中有几个源代码文件,其中包含对函数的前向声明

extern "C" void myPrintf(char *fmt, ...);

我想从所有文件中删除此声明。 我可以做一个grep,打印包含所有文件声明的行,但不知道如何用sed管道它以获得所需的结果。

2 个答案:

答案 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