私の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
(プロセスが含まれていないため、出力が1つ減少する可能性がありますsed
。)