对于Ubuntu和/或CentOS,是否有一个包,它有一个命令行工具,可以执行XPath单线程,foo //element@attribute filename.xml或者foo //element@attribute < filename.xml逐行返回结果?
我正在寻找一些可以让我只是apt-get install foo或者yum install foo然后只是开箱即用,没有包装或其他必要的改编的东西.
以下是一些接近的事例:
引入nokogiri.如果我写这个包装器,我可以用上面描述的方式调用包装器:
#!/usr/bin/ruby
require 'nokogiri'
Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
puts row
end
Run Code Online (Sandbox Code Playgroud)
XML :: XPath的.可以使用这个包装器:
#!/usr/bin/perl
use strict;
use warnings;
use XML::XPath;
my $root = XML::XPath->new(ioref => 'STDIN');
for my $node ($root->find($ARGV[0])->get_nodelist) {
print($node->getData, "\n");
}
Run Code Online (Sandbox Code Playgroud)
xpath来自XML :: XPath返回太多噪音,-- NODE --和attribute = "value".
xml_grep 来自XML :: Twig无法处理不返回元素的表达式,因此无法在不进一步处理的情况下提取属性值.
编辑:
echo cat //element/@attribute | xmllint --shell filename.xml返回类似的噪音xpath …
我想知道使用shellscript解析XML文件的最佳方法是什么?
如果你已经成功了,如果你能让我知道你是怎么做到的
我正在使用XML文件,它给出了这样的输出:
<tag>data</tag>
<tag>more data</tag>
...
Run Code Online (Sandbox Code Playgroud)
注意,这是一个平面文件,而不是XML树.我想删除XML标记,只显示其间的数据.我正在从命令行执行所有这些操作,并且想知道是否有更好的方法,而不是将其连接到awk两次...
cat file.xml | awk -F'>' '{print $2}' | awk -F'<' '{print $1}'
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想在一个命令中执行此操作
我需要一个可以从远程数据库中检索MySQL数据的bash脚本.实际上我已经完成了,但我现在要做的是以某种方式遍历记录并将变量传递给另一个bash文件.这是我的MySQL调用:
mysql -X -u $MyUSER -p$MyPASS -h$MyHOST -D$MyDB -e'SELECT `theme_name`, `guid` FROM `themes` WHERE `theme_purchased`="1" AND `theme_compiled`='0';' > themes.xml
download_themes.sh
Run Code Online (Sandbox Code Playgroud)
它现在将数据导出到一个名为theme.xml的xml文件中,我只想弄清楚循环数据的方法.我试图避免PHP和perl,只是尝试使用bash.提前致谢.
我需要找到一堆HTML文件中的所有位置,它们位于以下结构(CSS)中:
div.a ul.b
Run Code Online (Sandbox Code Playgroud)
或XPath:
//div[@class="a"]//div[@class="b"]
Run Code Online (Sandbox Code Playgroud)
grep在这里没有帮助我.是否有一个命令行工具可以返回符合此标准的所有文件(以及可选的所有位置)?即,如果文件与某个HTML或XML结构匹配,则返回文件名.
我正在搜索具有某些属性的xml文件.例如,包含以下模式的文件:
<param-value>
<name>Hosts</name>
<description>some description</description>
<value></value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
对于这样的文件,我想解析另一个标记的值,例如:
<param-value>
<name>Roles</name>
<description>some description</description>
<value>asdf</value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
并打印出文件名和"asdf".从命令行完成此操作的最简单方法是什么?
我想到的一种方法是使用带有-l选项的grep来过滤匹配的文件,然后使用xargs grep来提取Roles的值.但是,grep不适用于多行正则表达式.我看到另一个问题表明它可以用-Pzo选项完成,但是没有任何运气让它在我的情况下工作.有更简单的方法吗?
请多多包涵...
我有一个大的xml文件,我需要找到一个字符串"JOBNAME = 9027",然后找到包含"TASKTYPE"后面的行并更改该行.
所以我必须更改JOBNAME = 9027之后的TASKTYPE行.有几百个JOBNAME和TASKTYPE线,所有线的数量都不相同.
我试过sed,awk和bash无济于事.我确信有办法做到这一点,但它正在逃避我.
例:
JOBNAME="MYSAP#SDOR-SG-D-LATECODED-0927"
JUL="1"
JUN="1"
MAR="1"
MAXDAYS="0"
MAXRERUN="0"
MAXRUNS="0"
MAXWAIT="0"
MAY="1"
MULTY_AGENT="N"
NODEID="sappr2"
NOV="1"
OCT="1"
PARENT_FOLDER="MYSAP#SSDOR-D-SG-LATECODED-0927"
PRIORITY="10"
RETRO="0"
RULE_BASED_CALENDAR_RELATIONSHIP="O"
RUN_AS="MYSAP"
SEP="1"
SHIFT="Ignore Job"
SHIFTNUM="+00"
SUB_APPLICATION="MYSAP"
SYSDB="0"
TASKTYPE="Job"
Run Code Online (Sandbox Code Playgroud)