我正在使用ps,grep并sed尝试识别由某些特定参数(例如-DAppService=DDDABC_456或)唯一标识的某些Java进程-DAppService=DDDXYZ_456_cazorla。我想返回一个逗号分隔的列表:PID,argument,process
我正在使用CentOS7。到目前为止,我只差一点点就走了,但是纠结了。
我正在为此拍摄:
1234,-DAppService=DDDABC_456,/usr/java/jdk1.8.0_112/bin/java
2345,-DAppService=DDDABC_456_cazorla,/usr/java/jdk1.8.0_112/bin/java
3456,-DAppService=DDDXYZ_789,/usr/java/jdk1.8.0_112/bin/java
4567,-DAppService=DDDXYZ_789_cazorla,/usr/java/jdk1.8.0_112/bin/java
请注意,该参数可以带有或可以不带有“ _cazorla”后缀。
我尝试了这个,但是它丢失了参数(参数的数量可能会有所不同,所以我认为我不能继续使用$ 9,$ 10等):
ps -ef | grep DAppService=DDD[A-Z]_[0-9](?:_[a-z]*)? | grep -v grep | awk '{OFS=","; print $2,$8}' 给我:
1234,/usr/java/jdk1.8.0_112/bin/java
2345,/usr/java/jdk1.8.0_112/bin/java
3456,/usr/java/jdk1.8.0_112/bin/java
4567,/usr/java/jdk1.8.0_112/bin/java
另外,用逗号分隔所有grep列结果和所有我不需要的参数:
ps -aef | grep DAppService=DDD[A-Z]_[0-9](?:_[a-z]*)? | grep -v grep | sed -e "s/\s+/,/g" 实际结果太多,无法在此处列出,但例如
user,1234,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,2345,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,3456,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,4567,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
我的sed知识非常差(awk也是,但也可以选择接受)。一旦我对命令感到满意,我想将它们放入bash脚本中,可以从其他地方调用。
s -eo pid=,args= |\
awk '
{
for (i=3; i<=NF; i++)
if ($i ~ regex) {
print $1, $i, $2
next
}
}
' OFS=, regex='awk re to match arg'
要求ps仅输出pid和命令行
指定一个正则表达式,awk并检查每个参数(字段3到NF)是否匹配 如果找到,则输出pid($1),command($2)和相关参数($i)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。