Класс символов POSIX, который вы пытаетесь использовать, должен быть помещен в выражение с регулярными скобками, поэтому [[:digit:]]
не [:digit:]
. Вы также не ограничены использованием только одного класса символов в выражении скобок, поэтому, например. Можно использовать [[: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:]