0

私の問題の解決策をたくさん探した後、私は最終的にそれを尋ねて、いくつかの素晴らしい答えを得ようとしなければなりません

だから、私はいいねにxmlファイルを持っています

< trigger name="ECUReset" value="0x11">
...
< /trigger>
< trigger name="ClearDTC" value="0x14">
...
< /trigger>

trigger nameこれをシェルスクリプトで解析し、連想配列またはそれvalueに近いものを取得したいperl hashes

私がマシンで利用できるツールは、私が持ってgrepsedない、perlまたはawk

私が今何とか手に入れたのは

trigger_name=$(sed -n '/trigger_name=/ s/[^\x22]*\x22\(\x22*\)//p' $FILENAME)

しかし、それは私が望んでいたものを返しません

私はperlを使用できませんが、私はperlの開発者であり、awkやその他のものはなく、sedとgrepを使用したシェルであるため絶対に使用したいと思います。

4

4 に答える 4

0
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
于 2013-01-22T10:26:49.347 に答える
0

cutユーティリティがある場合:

$ grep "< trigger" test.xml \
> | cut --delimiter=" " --fields=3,4 \
> | cut --delimiter='"' --fields=2,4 --output-delimiter=" : "
ECUReset : 0x11
ClearDTC : 0x14
于 2013-01-22T10:20:09.130 に答える
0

これはあなたのために働きますか?(sedのみ)

sed -rn '/trigger name/{s/.*trigger name="([^"]*)" value="([^"]*)".*$/\1=\2/g;p}' file

テスト

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
于 2013-01-22T10:23:08.960 に答える
0

ちょうど使用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
于 2013-01-22T10:30:04.583 に答える