shell与xml、grep和sed
在为我的问题寻找了很多解决方案之后,我终于不得不问了,并试图得到一些很好的答案 因此,我有一个xml文件在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或其他东西,只需使用
< 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是我唯一可以使用的工具,您可以粘贴预期的输出吗?您好,感谢您的回复,但由于某些原因,这些命令都不会返回某些内容脚本是可移植的,因此可以与任何fsed
这意味着您发布的示例与实际文件不同。请确保您的示例表示您的文件正确,以便我可以相应地更新正则表达式。
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