我有一个名为test的文件,其中包含未知的行数:
<label>blogname</label><type>string</type>
<label>blog description</label><type>text</type>
我想使用SED或AWK读取该文件,并将每个标签和每种类型存储到一个单独的变量中,或者更好地存储到数组中。
此示例将在文件中输出label的内容:
awk -vRS="</variable>" '/<variable>/{gsub(/.*<variable>/,"");print}' test >result
但是我需要每行的内容并用每个标签的内容将它们分开来给我这样的东西:
label="blogname"
type="string"
然后我需要使用do while脚本处理数组。
我一直在寻找解决方案几个小时,但没有运气。
答案 0 :(得分:0)
永远不应该使用以下代码。它解决了这个问题,但是bash脚本并不是你想要用于这样一个任务的。
#!/bin/sh
while read line; do
label=`echo $line | sed -n 's|^.*<label>\(.*\)</label>.*$|\1|p'`
type=`echo $line | sed -n 's|^.*<type>\(.*\)</type>.*$|\1|p'`
echo "label:" $label
echo "type:" $type
echo
done
编辑:另一个受perelman评论启发的版本
#!/bin/sh
sed -n 's|^<label>\(.*\)</label><type>\(.*\)</type>.*$|\1\n\2|p' | while read label; do
read type
echo "label:" $label
echo "type:" $type
echo
done
答案 1 :(得分:0)
这可能对您有用:
sed 's/<\([^>]*\)>\([^<]*\)<\/\1>/&\n/g' file |
sed '/^\s*$/d;s/<\([^>]*\)>\([^<]*\)<\/\1>/\1="\2"/'
label="blogname"
type="string"
label="blog description"
type="text"