我有一个配置文件,需要使用bash解析一些值
例。在config.txt内部
some_var= Not_needed
tests= spec1.rb spec2.rb spec3.rb
some_other_var= Also_not_needed
基本上我只需要获取“spec1.rb spec2.rb spec3.rb”,不包括所有其他行,并从行中删除“tests =”。
我有这个并且它有效,但我希望有一个更简单的方法来做到这一点。
while read run_line; do
if [[ $run_line =~ ^tests=* ]]; then
echo "FOUND"
all_selected_specs=`echo ${run_line} | sed 's/^tests= /''/'`
fi
done <${config_file}
echo "${all_selected_specs}"
答案 0 :(得分:4)
all_selected_specs=$(awk -F '= ' '$1=="tests" {print $2}' "$config_file")
使用"= "
的字段分隔符,查找第一个字段为tests
的行并打印第二个字段。
答案 1 :(得分:2)
这也应该有用
grep "^tests" ${config_file} | sed -e "s/^tests= //"
答案 2 :(得分:0)
grep
和cut
怎么样?
all_selected_specs=$(grep "^tests=" "$config_file" | cut -d= -f2-)
答案 3 :(得分:0)
尝试:
all_selected_specs=$(awk '/^tests/{sub(/.*= /,"");print}' Input_file)
搜索一行中的字符串测试,然后将该行的所有值替换为(=)以获取所有规范值,一旦被替换,我们就可以获得规范值以便打印该行。最后用$(awk ...)将它的值保存到变量。