2017-05-10 23 views
2

設定ファイルがあり、bashを使用していくつかの値を解析する必要があります
Ex。 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」を取得する必要があります。

私はこれを持っていますが、それは機能しますが、これを行うもっと簡単な方法があることを望んでいます。 "= "のフィールドセパレータを使用

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

'sed -n 's /.../.../ p''でファイル全体に対してsedコマンドを実行してみませんか? –

+0

申し訳ありませんが、あなたが何を意味するかわからない、残念ながら私は多くのシェルスクリプトを使用しません。 – ibaralf

+0

'man sed'は明確にするのに役立ちます。 –

答えて

2

これはあまりにもgrepcutについて

grep "^tests" ${config_file} | sed -e "s/^tests= //" 
4
all_selected_specs=$(awk -F '= ' '$1=="tests" {print $2}' "$config_file") 

、最初のフィールドはtests及び第2のフィールドを印刷している行を探し。

0

どのように機能する必要がありますか?

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

試してみてください。私たちは、その後に置換されると、ラインの始点にしていた文字列のテストを探し

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

は、その行を代入すると、(=)までのすべての値がすべてのスペック値を取得することですスペック値を取得してその行を印刷することをお勧めします。最後に$(awk ...)で値を変数に保存します。

関連する問題