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

时间:2010-06-08 15:43:40

标签: regex unix sed substitution

我有包含html文件的嵌套子目录。对于我想要从文件顶部删除的每个html文件,直到模式<div id="left- 这是我从osx终端的尝试:

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

我在termainal中获得了很多html输出,但没有文件包含替换或写入。

3 个答案:

答案 0 :(得分:4)

您的命令有两个问题。第一个问题是您没有为sed选择输出位置。第二个是你的sed脚本没有做你想做的事情:你发布的脚本会查看每一行并删除<div>之前的所有内容。没有<div>的行将不受影响。您可以尝试:

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

这也会通过将.BAK附加到原始版本来自动备份您的文件。如果不合适,请将-i.BAK更改为-i

答案 1 :(得分:1)

当您要将sed正则表达式的结果写入文件时,您正在将stdout正则表达式的结果输出到-i

要使用sed执行查找和替换,请使用find . -name "*.html" -exec sed -i "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \; 标志:

{{1}}

如果可能,请确保在执行此命令之前备份文件。否则,您可能会因输入错误的正则表达式而导致数据丢失。

答案 2 :(得分:0)

您没有将sed的输出存储在任何地方;这就是为什么它会吐出html。