我正在寻找一种方法来处理一个HTML代码从命令行(可能使用XPATH)。
例如,我想删除.container
类或在.container
类之后添加新的<div>
。
输入:
<div class="bg-detail2" id="geometry">
<div class="container">
<h2>Title</h2>
<div class="line"></div>
<div class="fix"></div>
<div class="col50">
Content
</div>
<div class="col50">
Another Content
</div>
</div>
</div>
输出:
<div class="bg-detail2" id="geometry">
<div class="container">
<div class="newdiv">
<div class="line"></div>
<div class="fix"></div>
<div class="col50">
Content
</div>
<div class="col50">
Another Content
</div>
</div>
</div>
</div>
我的第一个想法是使用sed
,但它不是一个防弹的方法,我知道xmllint
,但它只能读取HTML文件。
是否有其他工具可用于命令行?
4条答案
按热度按时间zz2j4svz1#
我找不到一个程序来做你想要的。所以我做了一个。现在它工作了!
这段代码是可怕,但实际上将正常工作,包括在许多边缘情况。
示例用法:
语法
其中
argument
具有以下形式:其中:
separator
是不能出现在selector
或instruction
中的单个字符。selector
是一系列类似tag.class1.class2#id.class3
的东西,其中只能有一个#id
,tag
是可选的,可以有无限数量的.classn
,由>
分隔。示例:div#geometry > .container > h2
.instruction
是以下形式的指令:其中
command
是以下之一:d
-删除元素而不删除其子元素。不带参数。r
-用parameters
替换开始标签,并删除结束标签,但不删除元素的子元素。i
-有两个独立的行为,取决于标签是否自关闭。parameters
的形式为:separator2
不能出现在任何一个参数中,并且必须与separator
不同。它可以在单独的调用中具有不同的值。k
-删除元素及其子元素。不接受任何参数。0kjbasz62#
如果可以避免,请不要使用正则表达式解析HTML。
相反,尝试使用node,Python等HTML解析器。
如果你已经安装了docker,你可以试试这个简单的脚本:
演示了一个简单的remove / append。JQuery的强大功能。它使用jsdom和
eval()
。我托管了它here7xllpg7q3#
这将与sed一起工作,但正如你所说,它可能不是防弹的。这也可能导致缩进问题,但如果它始终一致,你可以使用它...
jv4diomz4#
首先,安装这个包:
sudo apt-获取安装html-xml-实用程序
此软件包中有31个工具,下面是它们的功能摘要:
这里有你需要的所有工具来操作一个html文件或xml文件。如你所愿。
示例hxprune:
hxprune -c container index.html〉index2.html
你可以选择你的html选择器,在这个例子中,是一个类“-c container”,然后你把你想要操作的文件名传递给它,最后用这个操作符“〉”你可以把hxprune的输出重定向到另一个文件,在输出中你将剪切html树的.container分支。