2

おそらく知っている人にとっては簡単な質問ですが、ファイルからいくつかの変数値を取得するのに苦労しています。私のファイルは次のようなものです:

variable1 12
variable2 43
variable3 897

variable2、43の値を取得したい。

sed でいくつかのコマンドを試しましたが、うまくいきませんでした:

sed -n 's/variable2 //;s/variable3//' myFile
4

4 に答える 4

3

のみ sed: _

$ sed -n 's/^variable2 //p' file
43

あなたの問題は-n、出力を抑制するために使用しているため、フラグsedが必要なので、置換が行われた行を出力することです。psed

これは単なるパターン マッチングなので、これにはgrepのみを使用します。

$ cat file
variable1 12
variable2 43
variable3 897

$ grep -Po '(?<=^variable2 )\d+' file
43

または単にawk

$ awk '$1=="variable2"/{print $2}' file
43
于 2013-01-10T15:02:29.610 に答える
3

使用する必要があります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
于 2013-01-10T15:11:59.737 に答える
2

grepを使用して行を見つけ、cutを使用して値を抽出します。

$ grep ^variable2 myFile | cut -d ' ' -f 2

テスト:

$ cat myFile 
variable1 12
variable2 43
variable3 897
$ grep ^variable2 myFile | cut -d ' ' -f 2
43
$ 
于 2013-01-10T14:59:43.523 に答える
1

そのようにフォーマットされたファイルの場合、grep|awk が機能します。

grep 変数 2 ファイル | awk '{print $2}'

わずかに異なる形式のファイルであっても、それを当てにしないでください。

于 2013-01-10T15:00:37.333 に答える