bash脚本读取一个文本文件,然后输出每行到变量
问题描述:
我有一个名为test的文件,其中包含线的未知数量:bash脚本读取一个文本文件,然后输出每行到变量
<label>blogname</label><type>string</type>
<label>blog description</label><type>text</type>
我想用SED或AWK读取该文件并将每个标签和每个类型存储到一个单独的变量中,或者更好地存储到数组中。
将输出标签的内容在文件中这个例子:
awk -vRS="</variable>" '/<variable>/{gsub(/.*<variable>/,"");print}' test >result
但我需要每一行的内容,并通过每个标签的内容分开他们给我这样的:
label="blogname"
type="string"
我然后需要用脚本处理数组。
我一直在寻找一个解决方案,这几个小时,但没有运气。
答
下面的代码不应该真的被使用。它解决了这个问题,但是一个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
编辑:另一个版本通过佩雷尔曼灵感来自评论
#!/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
+0
提供的解决方案是伟大的,但我试图添加第三个变量,但它似乎并没有工作 – user1205654 2012-02-12 23:26:38
答
这可能会为你工作:
sed 's/<\([^>]*\)>\([^<]*\)<\/\1>/&\n/g' file |
sed '/^\s*$/d;s/<\([^>]*\)>\([^<]*\)<\/\1>/\1="\2"/'
label="blogname"
type="string"
label="blog description"
type="text"
你也许可以写一个'awk'脚本输出与线该标签后跟一个带有类型的行,并在bash的'while'循环中使用'read'将值放入数组中。查阅'read'和bash数组。 – perelman 2012-02-12 21:22:05