sed:! p 명령의 이상한 동작

sed:! p 명령의 이상한 동작

다음 명령이 숫자 값을 인쇄하는 이유는 무엇입니까?

$ 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또는 일치하지 않는 모든 줄을 인쇄합니다.igt

$ 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:]

관련 정보