Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何grep XML文件?_Unix_Gnu - Fatal编程技术网

Unix 如何grep XML文件?

Unix 如何grep XML文件?,unix,gnu,Unix,Gnu,在GNU中,如何grep XML文件?情景: <HelloOperation> <Request>Lemon</Request> </HelloOperation> <HelloOperation> <Request>Banana</Request> </HelloOperation> <HelloOperation> <Request>Orange&l

在GNU中,如何grep XML文件?情景:

<HelloOperation>
    <Request>Lemon</Request>
</HelloOperation>
<HelloOperation>
    <Request>Banana</Request>
</HelloOperation>
<HelloOperation>
    <Request>Orange</Request>
</HelloOperation>
<DifferentOperation>
    <Request>Banana</Request>
</DifferentOperation>

柠檬
香蕉
橙色
香蕉
你知道我该怎么做吗?这样我就只能在HelloOperation中得到香蕉,而不是在不同的操作中?比如说,我不能使用awk。

使用awk怎么样?您可以使用XPath选择节点

$ cat 1.xml
<?xml version="1.0"?>
<root>
    <HelloOperation>
        <Request>Lemon</Request>
    </HelloOperation>
    <HelloOperation>
        <Request>Banana</Request>
    </HelloOperation>
    <HelloOperation>
        <Request>Orange</Request>
    </HelloOperation>
    <DifferentOperation>
        <Request>Banana</Request>
    </DifferentOperation>
</root>
$ xmlstarlet sel -t -v './/HelloOperation/Request' 1.xml
Lemon
Banana
$cat 1.xml
柠檬
香蕉
橙色
香蕉
$xmlstarlet sel-t-v'.//helloooperation/Request'1.xml
柠檬
香蕉

您可以使用
sed
获得这个问题的具体结果,但是当您开始尝试“查询”真实的xml数据时,它会很快崩溃。Awk会更好一些,但是xml需要一个xml工具。如果您希望做比上述问题更重要的事情,那么您必须开始计划时间来学习如何使用
xmllint
,或用于perl、python、java等的xml库,或者如下文所述,
xmlstarlet
。祝你好运(顺便提一下,这是一个每天都会在S.O.上出现的问题。你有没有花时间研究现有的问题?)