次のコマンドが数値を印刷するのはなぜですか?
$ iostat | sed -n '/[:digit:]/!p'
1.56 1.38 0.31 0.34 0.03 96.38
答え1
使用するPOSIX文字クラスは、通常の角かっこ式内に配置する必要があるため、[[:digit:]]
配置できません[:digit:]
。また、角かっこ式には1つの文字クラスのみを使用するように制限されていないため、またはを使用できます[[:digit:][:punct:]]
。[^[:digit:]]
あなたのコマンドは実際に「文字:
、d
または一致しないすべての行を印刷します。i
g
t
$ printf 'a\nd\ni\n:\n'
a
d
i
:
$ printf 'a\nd\ni\n:\n' | sed -n '/[:digit:]/!p'
a
あなたが望むもの:
$ iostat | sed -n '/[[:digit:]]/!p'
avg-cpu: %user %nice %system %iowait %steal %idle
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
最新のGNU sedバージョン(この場合はv.4.4)では、次の警告が表示されます。
$ iostat | sed -n '/[:digit:]/!p'
sed: character class syntax is [[:space:]], not [:space:]