다음 명령이 숫자 값을 인쇄하는 이유는 무엇입니까?
$ 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:]