Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
grep,xml问题 @ubuntu:/tmp$cat one.xml 12.10分贝 75% 0 99% @ubuntu:/tmp$sed-n-e's/*\([0-9][0-9]*\)./\1/p'one.xml @ubuntu:/tmp$_Xml_Linux_Grep - Fatal编程技术网

grep,xml问题 @ubuntu:/tmp$cat one.xml 12.10分贝 75% 0 99% @ubuntu:/tmp$sed-n-e's/*\([0-9][0-9]*\)./\1/p'one.xml @ubuntu:/tmp$

grep,xml问题 @ubuntu:/tmp$cat one.xml 12.10分贝 75% 0 99% @ubuntu:/tmp$sed-n-e's/*\([0-9][0-9]*\)./\1/p'one.xml @ubuntu:/tmp$,xml,linux,grep,Xml,Linux,Grep,我想得到中间值。但是它不起作用,我做错了什么?用正则表达式处理xml不是一个很好的主意,您可能需要研究像xmlstarlet这样的命令行工具来进行此提取 @ubuntu:/tmp$ cat one.xml <?xml version="1.0" encoding="UTF-8"?> <e2frontendstatus> <e2snrdb> 12.10 dB </e2snrdb> <e

我想得到中间值。但是它不起作用,我做错了什么?

用正则表达式处理xml不是一个很好的主意,您可能需要研究像xmlstarlet这样的命令行工具来进行此提取

   @ubuntu:/tmp$ cat one.xml 
<?xml version="1.0" encoding="UTF-8"?>
    <e2frontendstatus> 
     <e2snrdb>
      12.10 dB
     </e2snrdb>
     <e2snr>
      75 %
     </e2snr>
     <e2ber>
      0
     </e2ber>
     <e2acg>
      99 %
     </e2acg>
    </e2frontendstatus>
   @ubuntu:/tmp$ sed -n -e 's/.*<e2ber>\([0-9][0-9]*\)<\/e2ber>.*/\1/p' one.xml 
   @ubuntu:/tmp$ 

使用正则表达式处理xml不是一个很好的主意,您可能需要研究像xmlstarlet这样的命令行工具来完成此提取

   @ubuntu:/tmp$ cat one.xml 
<?xml version="1.0" encoding="UTF-8"?>
    <e2frontendstatus> 
     <e2snrdb>
      12.10 dB
     </e2snrdb>
     <e2snr>
      75 %
     </e2snr>
     <e2ber>
      0
     </e2ber>
     <e2acg>
      99 %
     </e2acg>
    </e2frontendstatus>
   @ubuntu:/tmp$ sed -n -e 's/.*<e2ber>\([0-9][0-9]*\)<\/e2ber>.*/\1/p' one.xml 
   @ubuntu:/tmp$ 

你在寻找什么价值?您知道Linux的grep有一个“After-context”和“Before-context”命令行参数吗?这可能是获取您正在查找的信息的最简单方法

例如,如果您试图获取行后的值,可以执行以下操作:

xmlstarlet sel -t -v "//e2ber" one.xml
$grep-A1”“| tail-1

您在寻找什么价值?您知道Linux的grep有一个“After-context”和“Before-context”命令行参数吗?这可能是获取您正在查找的信息的最简单方法

例如,如果您试图获取行后的值,可以执行以下操作:

xmlstarlet sel -t -v "//e2ber" one.xml
$grep-A1”“| tail-1

如果您有上述答案中提到的
grep-A
选项,并且系统上有Unix命令
tr
,您可以使某些东西相当健壮

此命令应获得适当的值:

$ grep -A1 "<e2ber>" | tail -1
grep-A2''one.xml |\
tr-d'\n'|\
sed-n-E-E的/*[:blank:][]*([0-9][0-9]*)[[:blank:][]*./\1/p'
无论XML文件的格式是否为
0
或作为


0
grep将获取足够多的行以包含结束标记,tr将使这一行变长,sed将提取值。我已经更新了sed中的正则表达式,以忽略值周围的空格

如果XML文件是双倍行距的,这可能仍然会有问题

<e2ber>
    0
</e2ber>

0

您可以事先通过
tr-s'\n'
运行XML文件来解决这个问题。这将把多个换行压缩成一个换行。

如果您有上面答案中提到的
grep-a
选项,并且在您的系统上使用Unix命令
tr
,您可以使某些功能相当健壮

此命令应获得适当的值:

$ grep -A1 "<e2ber>" | tail -1
grep-A2''one.xml |\
tr-d'\n'|\
sed-n-E-E的/*[:blank:][]*([0-9][0-9]*)[[:blank:][]*./\1/p'
无论XML文件的格式是否为
0
或作为


0
grep将获取足够多的行以包含结束标记,tr将使这一行变长,sed将提取值。我已经更新了sed中的正则表达式,以忽略值周围的空格

如果XML文件是双倍行距的,这可能仍然会有问题

<e2ber>
    0
</e2ber>

0

您可以事先通过
tr-s'\n'
运行XML文件来解决这个问题。这将把多个换行压缩成一个换行。

谢谢您的回答,但是我在嵌入式系统(卫星接收器)上运行了这个小命令,在嵌入式系统中无法运行xmlstarlet(这是一个非常好的工具):/。所有其他linux命令都可用,grep,sed..谢谢你的回答,但是我在嵌入式系统(卫星接收器)上运行这个小命令,在那里无法运行xmlstarlet(这是一个非常好的工具):/。所有其他linux命令都可用,grep,sed..它不起作用,因为你有换行符在那里。。。我敢肯定,这在sed或awk中是可行的,但在perl中可能会更快乐。。。问题是sed一次只对一行应用正则表达式。由于和位于不同的行上,因此表达式不匹配它们。你能把文件格式改成这样吗?这样你就可以更容易地识别线路。我们应该问的另一个问题是你的确切要求。我知道您的资源有限,因此无法完全解析XML,因此您的健壮性将受到限制。我希望,您至少可以指望XML文件不会做任何太疯狂的事情。因此,这是一个linux卫星接收器,我想在它上运行我的“每小时将信号强度保存到cvs文件”脚本。信号统计数据来自webinterface(ip/web/one.xml)。文件格式是固定的,我不能更改。它不工作,因为你有新行在那里。。。我敢肯定,这在sed或awk中是可行的,但在perl中可能会更快乐。。。问题是sed一次只对一行应用正则表达式。由于和位于不同的行上,因此表达式不匹配它们。你能把文件格式改成这样吗?这样你就可以更容易地识别线路。我们应该问的另一个问题是你的确切要求。我知道您的资源有限,因此无法完全解析XML,因此您的健壮性将受到限制。我希望,您至少可以指望XML文件不会做任何太疯狂的事情。因此,这是一个linux卫星接收器,我想在它上运行我的“每小时将信号强度保存到cvs文件”脚本。信号统计数据来自webinterface(ip/web/one.xml)。文件格式已修复,我无法更改。