おそらく知っている人にとっては簡単な質問ですが、ファイルからいくつかの変数値を取得するのに苦労しています。私のファイルは次のようなものです:
variable1 12
variable2 43
variable3 897
variable2、43の値を取得したい。
sed でいくつかのコマンドを試しましたが、うまくいきませんでした:
sed -n 's/variable2 //;s/variable3//' myFile
のみ sed
: _
$ sed -n 's/^variable2 //p' file
43
あなたの問題は-n
、出力を抑制するために使用しているため、フラグsed
が必要なので、置換が行われた行を出力することです。p
sed
これは単なるパターン マッチングなので、これにはgrepのみを使用します。
$ cat file
variable1 12
variable2 43
variable3 897
$ grep -Po '(?<=^variable2 )\d+' file
43
または単にawk
:
$ awk '$1=="variable2"/{print $2}' file
43
使用する必要がありますsed
か?
awk
私はこの種のものに使用することを好みます:
awk -v varname="variable2" '$1==varname {print $2}' myFile
これは、スペースを含む変数 (左側の列) がない限り機能します。
編集:
タイトルが「bashでファイルから変数値を取得」なので、外部プログラムを介さないバージョンはこちら
wantvar="variable2"
datafile="myFile"
while read varname varval; do
# Case-insensitive matching. If you need case-sensitivity, remove the pair of commas
# on both sides.
if [[ ${varname,,} = ${wantvar,,} ]]; then
echo $varval
break
fi
done < $datafile
そのようにフォーマットされたファイルの場合、grep|awk が機能します。
grep 変数 2 ファイル | awk '{print $2}'
わずかに異なる形式のファイルであっても、それを当てにしないでください。