Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
Use a different delimiter with sed and you won't need to escape the slashes. That will make it easier to read. sed 's|.*dlclose.*|//&|g' – Dennis Williamson Aug 12 '10 at 3:48

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

Remove -i option, it is useless.


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


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


for f in $(grep -lIR --exclude-dir=.svn "dlclose" .)
   sed -i bak 's/.*dlclose.*/\/\/&/g' $f
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.