내 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
.)