sed 명령이 ps 헤더를 인쇄하는 이유는 무엇입니까?

sed 명령이 ps 헤더를 인쇄하는 이유는 무엇입니까?

내 sed 명령이 여기에 ps 헤더를 인쇄하는 이유는 무엇입니까?

$ ps | sed -E "s/\s*([[:digit:]]+)\s+.*/\1/"
  PID TTY          TIME CMD
26636
26637
54326

PID TTY TIME CMD선이 필터를 통과하는 이유는 무엇 입니까? , , 로 g정규식을 종료하면 p도움이 되지 않습니다.


$ ps | sed -n -E "s/\s*([[:digit:]]+)\s+.*/\1/"
$ ps | sed -E "s/\s*([[:digit:]]+)\s+.*/\1/"
  PID TTY          TIME CMD
17966
17967
54326
$ ps | sed -E "s/\s*([[:digit:]]+)\s+.*/\1/p"
  PID TTY          TIME CMD
18429
18429
18430
18430
54326
54326
$ ps | sed -n -E "s/\s*([[:digit:]]+)\s+.*/\1/p"
18734
18735
54326
$ ps | sed -n -E "s/\s*([[:digit:]]+)\s+.*/\1/g"
$ 

굉장히 캐주얼해보이네요 :)


제목을 인쇄해야 하는 이유:

$ ps | sed -n -E "s/^\s*([^\s]+)\s*([^\s]+)\s*([^\s]+)\s*([^\s]+).*$/\1/p"
PID TTY          TIME 
34666
34667
54326

답변1

일치하는 항목 이 s/pattern/replacement없으면 pattern아무것도 하지 않고 sed기본적으로 패턴 공간을 인쇄합니다. 인쇄하고 싶다면오직결과를 바꾸려면 -n(기본 인쇄를 억제하기 위해) 및 p(성공적인 교체 후 패턴 공간을 인쇄하기 위해) 다음을 추가합니다.

ps | sed -n -E "s/\s*([[:digit:]]+)\s+.*/\1/p"

ps후처리가 필요하지 않도록 PID만 출력하고 싶을 수도 있습니다 .

ps -opid=

ps( 프로세스가 포함되지 않아 출력이 하나 줄어들 수 있습니다 sed.)

관련 정보