A classe de caracteres POSIX que você está tentando usar deve ser colocada dentro de uma expressão de colchete regular, portanto [[:digit:]]
not [:digit:]
. Você também não está limitado a usar apenas a classe de um caractere na expressão de colchetes, por exemplo, [[:digit:][:punct:]]
ou [^[:digit:]]
pode ser usado.
Seu comando realmente significa "imprimir todas as linhas que não correspondem a nenhum dos caracteres :
, d
, i
, g
ou t
:
$ printf 'a\nd\ni\n:\n'
a
d
i
:
$ printf 'a\nd\ni\n:\n' | sed -n '/[:digit:]/!p'
a
O que você queria era:
$ 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
Note que as novas versões do GNU sed (v.4.4 neste exemplo) imprimirão um aviso:
$ iostat | sed -n '/[:digit:]/!p'
sed: character class syntax is [[:space:]], not [:space:]