我知道
ps ax
返回pids
1 ? Ss 0:01 /sbin/init 2 ? S< 0:00 [kthreadd] 3 ? S< 0:00 [migration/0]
我只需要清理那些字符串,但我无法用sed做,因为我无法编写正确的正则表达式.你可以帮帮我吗?
解决方法
使用ps输出格式:
ps -A -o pid
输出格式化命令是最佳选择. o选项控制输出格式.我列出了下面的一些参数,其余的参见’man ps'(使用多个它将是-o pid,cmd,flags).
KEY LONG DESCRIPTION c cmd simple name of executable C pcpu cpu utilization f flags flags as in long format F field g pgrp process group ID G tpgid controlling tty process group ID j cutime cumulative user time J cstime cumulative system time k utime user time o session session ID p pid process ID
获取列时,awk或Cut会更好:
通常你不想要一个正则表达式来选择第一列,你可能想要管道它切割或awk切出第一列,如:
ps ax | awk '{print $1}'
正则表达式是一个选项,如果不是最好的:
如果你使用正则表达式,它可能是这样的:
ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'
$1仅打印括号中匹配的内容. ^锚定到行的开头.空格星号表示在数字前允许使用可选的空格字符. [0-9]表示一个或多个数字.但我不建议正则表达式执行此特定任务,看看为什么?