次の行を持つ変数があります。
iBMC=277
次のように一致させようとしています。
BMC="$(echo "$allnow" | grep iBMC=[0-9] | sed 's/iBMC=//g')"
これによりBMCが空になります。次のように見えますbash -x
。
++ grep 'iBMC=[0-9] '
++ sed s/iBMC=//g
+ BMC=
また、次の行など、いくつかの項目をさらに一致させる必要があります。
Name="$(echo "$allnow" | grep stringName= | sed 's/stringName=//g')"
しかし、結果も空です。これは$allnow
:
QQ1=0999999
QQ2=00aaaaa
RR=yes
GG=no
stringName=skolan8
sTitle=
iBMC=277
L3-cache="8 MB"
Minne="16 GB"
答え1
grepを使用する必要はありません。 (おそらく情報量が多く、パフォーマンスの問題が原因である可能性がありますが、変数に格納されているデータではないようです)。
BMC="$(echo "${allnow}" | sed -e '/iBMC=[0-9]/!d' -e 's/iBMC=//;q' )"
答え2
@NeronLeVeluの答えは気に入っていますが、ファイルの2つの場所で同じまたはほぼ同じ正規表現を見ると疑わしいですsed
。 ;)
もちろん、次のように単純化できます。
sed -n 's/iBMC=//;T;/^[0-9]/p'
またsed
はなしでBSDを使用している場合は、T
簡単な回避策を使用できます。
sed -n -e 's/iBMC=//;ta' -e 'b' -e ':a' -e '/^[0-9]/p'
一方、すべてを簡単にすることができます。
sed -n 's/iBMC=\([0-9]\)/\1/p'
最初のバージョンと長さはまったく同じですが、BSDに移植可能ですsed
。
したがって、次のように梱包してください。
BMC="$(echo "$allnow" | sed -n 's/^iBMC=\([0-9]\)/\1/p')"
Name="$(echo "$allnow" | sed -n 's/^stringName=//p')"
答え3
その後の「空間」は]
実際には空間ではなく¬†
。 BBEditでも同じように見えますが、HexFiendで開くとその文字が表示されます。 BBEditには、スペースを置き換えるためのいくつかのショートカットがあります¬†
。
答え4
<<IN \
grep '^iBMC=[0-9]\|^stringName=' |\
sed 's/^[[:lower:]]*//'
$allnow
IN
ファイルにきれいな行末があるかどうかを確認したいかもしれませんが、それについてはわかりません。