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

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

我需要注释掉当前目录和任何子目录中每个文件的所有包含“dlclose”的行(递归)。根据我从各种指南中找到的信息,这是我目前最好的猜测。

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

两个 grep 成功找到了我想要更改的所有文件,但是sed声称unterminated s command.

答案1

您正在尝试就地编辑(-i选项) 这STDIN

消除-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

相关内容