问题用sed修改文件

时间:2014-07-09 16:42:46

标签: bash shell sed grep

我遇到以下代码的问题,如果我制作1.log文件但不修改包含PHP eval(..)的文件。向我展示了以下内容:sed: no input files.

因为我错了?

grep -lr --include=*.php "eval(base64_decode" ./ >> 1.log | xargs sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g'

2 个答案:

答案 0 :(得分:1)

您收到错误消息,因为您的grep命令不会产生任何输出(您通过xargs传递给sed)。你可能想要这个:

grep -lr --include=*.php "eval(base64_decode" ./ | xargs sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g'

替代文件列表:

grep -lr --include=*.php "eval(base64_decode" ./ > files
sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g' $(cat files)

答案 1 :(得分:1)

如果要将输出保存在日志文件中并将其输出到xargs,请使用tee

grep -lr --include=*.php "eval(base64_decode" ./ |
    tee -a 1.log |
    xargs sed -i.bak 's/<?php eval(base64_decode[^;]*;/<?php\n/g'

-a选项会使tee附加到文件中。