代码之家  ›  专栏  ›  技术社区  ›  Dr. Frankenstein

递归多行SED-删除文件开头,直到模式匹配

  •  1
  • Dr. Frankenstein  · 技术社区  · 16 年前

    我已经嵌套了包含HTML文件的子目录。对于这些HTML文件,我希望从文件顶部删除,直到模式 <div id="left- 这是我在OSX终端上的尝试:

    find . -name "*.html" -exec sed "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \;
    

    我在termainal中得到了大量的HTML输出,但是没有包含替换内容或写入的文件。

    3 回复  |  直到 11 年前
        1
  •  4
  •   VeeArr    16 年前

    你的命令有两个问题。第一个问题是您没有为选择输出位置 sed . 第二个是你的 塞德 脚本没有按您希望的方式执行:您发布的脚本将查看每一行,并删除该行中位于 <div> . 没有的行 <DIV & GT; 不会受到影响。您可以尝试:

    find . -name "*.html" -exec sed -i.BAK -n "/<div id=\"left-col/,$ p" {} \;
    

    这还将通过附加 .BAK 到原始版本。如果这是不可取的,改变 -i.BAK 简单地 -i .

        2
  •  1
  •   fmark    16 年前

    您正在输出 sed 正则表达式 stdout ,控制台,当您想将其写入文件时。

    要执行查找并用SED替换,请使用 -i 旗帜:

    find . -name "*.html" -exec sed -i "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \;
    

    确定你 备份文件 在执行此命令之前,如果可能的话。否则,您可能会因输入错误的regex而导致数据丢失。

        3
  •  0
  •   dplass    16 年前

    您没有存储 sed 任何地方;这就是它吐出HTML的原因。

    推荐文章