ファイルの行の一部を変数に格納するためのsed式の単純化

ファイルの行の一部を変数に格納するためのsed式の単純化

文字列の一部を分離してbashスクリプトの変数に格納するbashスクリプトを作成しています。$INSTALL_INFOデータを抽出するファイルが変数であると仮定すると、次のようになります。

 BOOST=`cat $INSTALL_INFO | grep 'BOOST:' | sed 's/BOOST://g' | sed 's/^[ \t]*//'`

この場合、私が探しているキーワードはBoostです。ファイル項目の形式は次のとおりです。

<possible whitespace><exact title><indeterminate whitespace><data I want><possible whitespace>

sedコマンドを使用してこれを行うためのよりきれいな方法が必要ですが、何もわかりません。

ベストアンサー1

これを解決する方法は、式sed -nに一致する行のみを印刷することを使用し、必要な部分だけを残し、行全体を記述する式を使用することです。

BOOST=$(sed -n 's/^.*BOOST:[ \t]*\([^ \t]*\).*$/\1/p' $INSTALL_INFO)

尾は(交換後)行を印刷するように/p指示します。sed

「私が望むデータ」自体にスペースを含めることができれば、少し面倒です。行末のスペースを「噛む」ために式を変更する必要があります。 「reluctant」修飾子を使用できるようにPerlに切り替えます(?繰り返し演算子の後に)。

BOOST=$(perl -ne 'print if s/^.*BOOST:\s*(.*?)\s*$/\1/' install_info.txt)

もちろん、Perlを使用すると、行を変更せずに一致する部分のみを印刷できます。

BOOST=$(perl -ne 'print $1 if /BOOST:\s*(.*?)\s*$/' install_info.txt)

おすすめ記事