在HTM文件上搜索并在第一行添加

时间:2016-09-22 08:59:05

标签: linux shell unix sed grep

我找不到搜索哪些HTM *文件没有DOCTYPE并将此DOCTYPE添加到此特定文件的好方法

我得到了文件列表:

for i in ` find . -name "*.htm*" -print`; do grep -L "DOCTYPE" $i;done;

但是我找不到如何使用sed

在这个列表上工作

我试过了:

for i in ` find . -name "*.htm*" -print; grep -L "DOCTYPE"`; do sed -i '1i <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' $i; done;

但是它在所有HTM *文件上添加了这一行

由于

1 个答案:

答案 0 :(得分:1)

您应该使用-exec的{​​{1}}选项执行此操作,而不是编写自己的循环:

find

这将查找以find . -name '*.htm?' -exec sed -i .bak '1 { /DOCTYPE/ ! i\ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> }' {} + 结尾的所有文件,后跟可选的额外字符并执行sed命令。如果第一行上的.htm不匹配,则插入字符串。

/DOCTYPE/-exec一起使用意味着使用了最小的sed实例数,而不是为每个找到的文件运行单独的实例。

我在{} +之后添加了一个参数,以便使用后缀-i创建备份文件。