我是Linux的新手。当我运行这样的命令
ps -ef | grep 5312
系统向我显示了有关PID 5312过程的所有信息。例如,输出如下
tomcat 5312 1 0 20:03 ? 00:00:09 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xms500M -Xmx700M -server -XX:+UseParallelGC -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
从这样的输出中,我只想知道“ tmpdir = / opt / tomcat / temp”参数。我只需要tmpdir,等号和等号后的值。我该如何使用sed或awk(或grep)呢?
答案 0 :(得分:3)
将grep
与-o
选项一起使用仅返回匹配的部分。
ps -ef | grep 5312 | grep -o 'tmpdir=[^ ]*'
答案 1 :(得分:-1)
因为您要求awk:
ps -ef|grep -v awk|awk '{for(i=1;i<=NF;i++){if($i ~ /tmpdir/){print $i}}}' | awk -F'.' '{print $NF}'
其中:
ps -ef
:显示所有过程。
grep -v awk
:确保您不显示自己的awk进程。
for(i=1;i<=NF;i++)
:将循环浏览当前记录的所有字段,直到到达last field。
if($i ~ /tmpdir/){print $i}}
:由于您正在在字段中循环(如果当前包含键字符串“ tmpdir”,则将其打印出来)(字段)。
awk -F'.' '{print $NF}'
:您只请求了tmpdir参数,因此您希望最后一个字段中的所有内容都带有一个点作为字段分隔符。