注释符合某种模式的所有行

我需要为当前目录中的每个文件和任何子目录(recursion地)注释掉包含“dlclose”的所有行。 鉴于我能从各种指南中find的东西,这是我迄今为止最好的猜测。

grep -lIR "dlclose" . | grep -v ".svn" | sed -i 's/.*dlclose.*/\/\/&/g' 

两个greps成功find了我想要更改的所有文件,但是sed声明了一个unterminated s command

您正在尝试编辑STDIN-i选项)。

删除-i选项,这是没用的。

注意

你可以加快命令的速度, 避免第二个grep ,除了根目录以外的不必要的目录

尝试

 grep -lIR --exclude-dir=.svn "dlclose" . | xargs sed -i bak 's/.*dlclose.*/\/\/&/g' 

要么

 for f in $(grep -lIR --exclude-dir=.svn "dlclose" .) do sed -i bak 's/.*dlclose.*/\/\/&/g' $f done