类似于 sed 的工具,用于在 <div id="jsn-page">...</div> 之后插入 HTML 片段代码(div 块)
Tool sed-like to insert a HTML snippet code (a div block) after a <div id="jsn-page">...</div>
我正在寻找一种在块 <div id="jsn-body">...</div>
之后插入块 <div id="jsn-content-bottom">...code...</div>
的方法。
我想使用 shell 脚本,因为我需要将此插入应用于递归目录中的多个 HTML 文件。
在第一次尝试中,我尝试使用 sed
。但问题是我不知道如何找到与打开标签 <div id="jsn-body">
相对应的正确结束标签 </div>
。事实上,<div id="jsn-body">
块内还有多个其他 <div>
标签,我需要找到这个结束标签(也许它的行号就足够了),因为我想在 <div id="jsn-content-bottom">...code...</div>
之后插入块这个结束标记。
任何人都可以看到如何轻松找到此结束标记的行(当我这么说时,我想在我的 shell 脚本中使用 sed
但我对其他工具开放或 Linux 命令,使 HTML 文件的处理更容易)。
最后一件事,我希望将插入的块存储在一个文件中并为我的插入处理该文件(使用 cat
或类似命令)。
更新
目前,ctac_
建议的解决方案几乎可以正常工作。您可以在 index.html.txt, with the code snippet to insert insert.txt 和建议的命令行上测试 HTML 源代码,即:
awk '
NR==FNR{b=b[=14=]RS;next}
/<div id="jsn-body">/{a=1;s[d]++}
a && /<div/{s[d]++}
a && /<\/div/{s[d]--}
a && s[d]==1{a=0;print [=14=]RS b;next}1' insert.txt index.html.txt > outfile.html.txt
不幸的是,当我在上述 awk 命令的输出中“grep 'jsn-content-bottom”时(即通过删除重定向“> outfile.html.txt
”),没有显示模式匹配。
我不知道错误可能来自哪里。
您可以在以下文件上测试ctac_
给出的解决方案:
并使用上面的 awk
命令。
你可以试试这个 awk
awk '
NR==FNR{b=b[=10=]RS;next}
/<div id="jsn-page">/{a=1;d++}
a && /<div/{d++}
a && /<\/div/{d--}
a && d==1{a=0;print [=10=]RS b;next}1' insert.txt infile.html >outfile.html
insert.txt 包含块 'jsn-content-bottom">...code...'.
先读取这个文件,把这个内容保存在b.
阅读 infile.html 并找到块 jsn-page 的开始。
a 是一个标志,告诉我们在街区中。
每次看到 'div' d 都会递增(块开始)。
每次看到“<\div”时,d 都会递减(块结束)。
当dreturn为1时,jsn-page块结束
a=0 告诉我们已经出局了。
所以打印当前行和b(插入文件的内容)
我正在寻找一种在块 <div id="jsn-body">...</div>
之后插入块 <div id="jsn-content-bottom">...code...</div>
的方法。
我想使用 shell 脚本,因为我需要将此插入应用于递归目录中的多个 HTML 文件。
在第一次尝试中,我尝试使用 sed
。但问题是我不知道如何找到与打开标签 <div id="jsn-body">
相对应的正确结束标签 </div>
。事实上,<div id="jsn-body">
块内还有多个其他 <div>
标签,我需要找到这个结束标签(也许它的行号就足够了),因为我想在 <div id="jsn-content-bottom">...code...</div>
之后插入块这个结束标记。
任何人都可以看到如何轻松找到此结束标记的行(当我这么说时,我想在我的 shell 脚本中使用 sed
但我对其他工具开放或 Linux 命令,使 HTML 文件的处理更容易)。
最后一件事,我希望将插入的块存储在一个文件中并为我的插入处理该文件(使用 cat
或类似命令)。
更新
目前,ctac_
建议的解决方案几乎可以正常工作。您可以在 index.html.txt, with the code snippet to insert insert.txt 和建议的命令行上测试 HTML 源代码,即:
awk '
NR==FNR{b=b[=14=]RS;next}
/<div id="jsn-body">/{a=1;s[d]++}
a && /<div/{s[d]++}
a && /<\/div/{s[d]--}
a && s[d]==1{a=0;print [=14=]RS b;next}1' insert.txt index.html.txt > outfile.html.txt
不幸的是,当我在上述 awk 命令的输出中“grep 'jsn-content-bottom”时(即通过删除重定向“> outfile.html.txt
”),没有显示模式匹配。
我不知道错误可能来自哪里。
您可以在以下文件上测试ctac_
给出的解决方案:
并使用上面的 awk
命令。
你可以试试这个 awk
awk '
NR==FNR{b=b[=10=]RS;next}
/<div id="jsn-page">/{a=1;d++}
a && /<div/{d++}
a && /<\/div/{d--}
a && d==1{a=0;print [=10=]RS b;next}1' insert.txt infile.html >outfile.html
insert.txt 包含块 'jsn-content-bottom">...code...'.
先读取这个文件,把这个内容保存在b.
阅读 infile.html 并找到块 jsn-page 的开始。
a 是一个标志,告诉我们在街区中。
每次看到 'div' d 都会递增(块开始)。
每次看到“<\div”时,d 都会递减(块结束)。
当dreturn为1时,jsn-page块结束
a=0 告诉我们已经出局了。
所以打印当前行和b(插入文件的内容)