为什么以下命令会打印数值?
$ iostat | sed -n '/[:digit:]/!p'
1.56 1.38 0.31 0.34 0.03 96.38
答案1
您尝试使用的 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:]