我有一个var $ ENTRIES
ENTRIES="<entry key="key-one">value</entry> <entry key="key-two">value/two</entry>"
需要转换为csv:
convertToCSV() {
# Do stuff with $ENTRIES
} >> dict.csv
导致:
cat dict.csv
key-one,value
key-two,value/two
我们如何从$ ENTRIES中提取关键字和值? 会说我们需要某种sed命令吗? 我们在哪里取得关键:
key=" and ">
取以下值:
> and </entry>
以某种方式循环通过$ ENTRIES中的所有条目......
答案 0 :(得分:1)
尝试一次,让我知道这是否对您有所帮助。一旦你对结果感到满意,你就可以将这个值重新定向到.csv输出文件。
解决方案1:
echo "$ENTRIES" | awk -v RS=" " '{sub(/.*=/,"");sub(/<.*/,"");sub(/>/,",");if($0){print}}'
解决方案第二: 此处再添加一个解决方案。
ENTRIES="<entry key=\"key-one\">value</entry> <entry key=\"key-two\">value/two</entry>"
echo "$ENTRIES" | awk -v RS='<entry key=|</entry>' 'NF{sub(/>/,",");gsub(/\"/,"");print}'
key-one,value
key-two,value/two
答案 1 :(得分:0)
另一种选择是将XPath与xmlstarlet
...
ENTRIES='<entry key="key-one">value</entry> <entry key="key-two">value/two</entry>'
echo "<doc>$ENTRIES</doc>" | \
xmlstarlet sel -t \
-m "/doc/entry" \
-v "concat(@key,',',normalize-space())" \
-n \
> dict.csv
注意:
$ENTRIES
变量与另一个元素(doc
)包装起来,以使XML格式正确。ENTRIES
并将外部引号更改为撇号来更改$
变量。