我找不到搜索哪些 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* 文件上添加该行
谢谢
最佳答案
您应该使用-exec
选项来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">
}' {} +
这会找到所有以 .htm
结尾的文件,后跟可选的额外字符并执行 sed 命令。如果 /DOCTYPE/
在第一行不匹配,则插入该字符串。
将 -exec
与 {} +
结合使用意味着使用最少数量的 sed 实例,而不是为找到的每个文件运行一个单独的实例。
我在 -i
后添加了一个参数,以便创建后缀为 .bak
的备份文件。
关于linux - 搜索 HTM 文件并在第一行添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39634570/