提取与模式匹配的部分线条

时间:2017-05-10 19:04:41

标签: bash

我有一个配置文件,需要使用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}"

4 个答案:

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

grepcut怎么样?

all_selected_specs=$(grep "^tests=" "$config_file" | cut -d= -f2-)

答案 3 :(得分:0)

尝试:

all_selected_specs=$(awk '/^tests/{sub(/.*= /,"");print}' Input_file)

搜索一行中的字符串测试,然后将该行的所有值替换为(=)以获取所有规范值,一旦被替换,我们就可以获得规范值以便打印该行。最后用$(awk ...)将它的值保存到变量。