Bash脚本读取文本文件,然后将每行输出到变量中

时间:2012-02-12 21:10:32

标签: arrays bash multidimensional-array sed

我有一个名为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脚本处理数组。

我一直在寻找解决方案几个小时,但没有运气。

2 个答案:

答案 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"