Comment all lines matching some pattern

greppipesed

I need to comment out all lines containing "dlclose" for each file in the current directory and any sub-directories (recursively). This is my best guess so far given what I was able to find out from various guides.

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

The two greps successfully find all files I want changed, but sed claims an unterminated s command.

Best Answer

You are attempting to edit in place (-i option) the STDIN.

Remove -i option, it is useless.

Note:

You can speed up the command a lot avoiding the second grep, excluding at the root the unnecessary directories

Try

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

or

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