1

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

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

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

4

3 回答 3

4

您的命令有两个问题。第一个问题是您没有为sed. 第二个是你的sed脚本没有做你想做的事:你发布的脚本会查看每一行并删除<div>. 没有<div>将的行不受影响。您可能想尝试:

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

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

于 2010-06-08T16:12:04.260 回答
1

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

要使用 sed 执行查找和替换,请使用以下-i标志:

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

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

于 2010-06-08T15:53:36.290 回答
0

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

于 2010-06-08T15:49:45.093 回答