Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
shell与xml、grep和sed_Xml_Shell_Sed_Grep - Fatal编程技术网

shell与xml、grep和sed

shell与xml、grep和sed,xml,shell,sed,grep,Xml,Shell,Sed,Grep,在为我的问题寻找了很多解决方案之后,我终于不得不问了,并试图得到一些很好的答案 因此,我有一个xml文件在 < trigger name="ECUReset" value="0x11"> ... < /trigger> < trigger name="ClearDTC" value="0x14"> ... < /trigger> 但这并没有回报我想要的 我不能使用perl,但我肯定想使用,因为我是perl开发人员,也没有awk或其他东西,只需使用

在为我的问题寻找了很多解决方案之后,我终于不得不问了,并试图得到一些很好的答案

因此,我有一个xml文件在

< trigger name="ECUReset" value="0x11">
...
< /trigger>
< trigger name="ClearDTC" value="0x14">
...
< /trigger>
但这并没有回报我想要的


我不能使用perl,但我肯定想使用,因为我是perl开发人员,也没有awk或其他东西,只需使用sed和grep进行shell操作。

如果您有
cut
实用程序:

$ grep "< trigger" test.xml \
> | cut --delimiter=" " --fields=3,4 \
> | cut --delimiter='"' --fields=2,4 --output-delimiter=" : "
ECUReset : 0x11
ClearDTC : 0x14
$grep“| cut--delimiter=“”--fields=3,4\
>| cut--delimiter='“'--fields=2,4--output delimiter=“:”
ECUReset:0x11
清除故障诊断码:0x14
这对您有用吗?(仅适用于sed)

试验

kent$echo'
...


...
“| sed-rn”/trigger name/{s/*trigger name=“([^”]*)”value=“([^”]*)”*$/\1=\2/g;p}
ECUReset=0x11
ClearDTC=0x14
测试:

>cat temp
< trigger name="ECUReset" value="0x11">
...
< /trigger>
< trigger name="ClearDTC" value="0x14">
...
< /trigger>
> grep 'trigger name' temp | cut -d'"' -f 2,4 | sed 's/\"/ /g'
ECUReset 0x11
ClearDTC 0x14
>cat温度

...


...

>grep'trigger name'temp | cut-d''-f 2,4 | sed's/\“//g'
ECUReset 0x11
清除DTC 0x14

仅使用
sed

# names
$ sed -n 's/< trigger name="\([^"]*\).*/\1/p' file
ECUReset
ClearDTC

# values
$ sed -n 's/< trigger.*value="\([^"]*\).*/\1/p' file
0x11
0x14

# both
$ sed -n 's/.*< trigger name="\([^"]*\).*value="\([^"]*\).*/\1 \2/p' file
ECUReset 0x11
ClearDTC 0x14
#名称
$sed-n的/
如果您不是在寻找perl解决方案,为什么要包含perl标记?@Dmitry,不,不幸的是,shell、sed和grep是我唯一可以使用的工具,您可以粘贴预期的输出吗?您好,感谢您的回复,但由于某些原因,这些命令都不会返回某些内容脚本是可移植的,因此可以与任何f
sed
这意味着您发布的示例与实际文件不同。请确保您的示例表示您的文件正确,以便我可以相应地更新正则表达式。
kent$  echo '< trigger name="ECUReset" value="0x11">
...
< /trigger>
< trigger name="ClearDTC" value="0x14">
...
< /trigger>'|sed -rn '/trigger name/{s/.*trigger name="([^"]*)" value="([^"]*)".*$/\1=\2/g;p}'                                                                              
ECUReset=0x11
ClearDTC=0x14
grep 'trigger name' your_file| cut -d'"' -f 2,4|sed 's/\"/ /g'
>cat temp
< trigger name="ECUReset" value="0x11">
...
< /trigger>
< trigger name="ClearDTC" value="0x14">
...
< /trigger>
> grep 'trigger name' temp | cut -d'"' -f 2,4 | sed 's/\"/ /g'
ECUReset 0x11
ClearDTC 0x14
# names
$ sed -n 's/< trigger name="\([^"]*\).*/\1/p' file
ECUReset
ClearDTC

# values
$ sed -n 's/< trigger.*value="\([^"]*\).*/\1/p' file
0x11
0x14

# both
$ sed -n 's/.*< trigger name="\([^"]*\).*value="\([^"]*\).*/\1 \2/p' file
ECUReset 0x11
ClearDTC 0x14