Linux bash取值问题

blck
  • 11

命令:cat /proc/10725/environ
结果:

XDG_SESSION_ID=355SELINUX_ROLE_REQUESTED=SHELL=/bin/bashHADOOP_HOME=/usr/hadoop/hadoop-3.0.0SSH_CLIENT=127.0.0.1 59240 22HDFS_NFS3_SECURE_EXTRA_OPTS=-jvm serverSELINUX_USE_CURRENT_RANGE=HDFS_DATANODE_SECURE_EXTRA_OPTS=-jvm serverHDFS_DATANODE_OPTS=-Dhadoop.security.logger=ERROR,RFASHDFS_PORTMAP_OPTS=-Xmx512mUSER=rootMALLOC_ARENA_MAX=4HDFS_SECONDARYNAMENODE_OPTS=-Dhadoop.security.logger=INFO,RFASPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binMAIL=/var/mail/rootHADOOP_ENV_PROCESSED=trueHADOOP_HDFS_HOME=/usr/hadoop/hadoop-3.0.0HADOOP_COMMON_HOME=/usr/hadoop/hadoop-3.0.0PWD=/rootHADOOP_YARN_HOME=/usr/hadoop/hadoop-3.0.0JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre/HADOOP_OS_TYPE=LinuxHADOOP_CONF_DIR=/usr/hadoop/hadoop-3.0.0/etc/hadoopLANG=zh_CN.UTF-8HADOOP_OPTS=-Djava.net.preferIPv4Stack=true -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dyarn.log.dir=/usr/hadoop/hadoop-3.0.0/logs -Dyarn.log.file=hadoop-root-namenode-localhost.localdomain.log -Dyarn.home.dir=/usr/hadoop/hadoop-3.0.0 -Dyarn.root.logger=INFO,console -Djava.library.path=/usr/hadoop/hadoop-3.0.0/lib/native -Dhadoop.log.dir=/usr/hadoop/hadoop-3.0.0/logs -Dhadoop.log.file=hadoop-root-namenode-localhost.localdomain.log -D**hadoop.home.dir=/usr/hadoop/hadoop-3.0.0** -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xmlSELINUX_LEVEL_REQUESTED=HOME=/rootSHLVL=1HADOOP_MAPRED_HOME=/usr/hadoop/hadoop-3.0.0LOGNAME=rootCLASSPATH=/usr/hadoop/hadoop-3.0.0/etc/hadoop:/usr/hadoop/hadoop-3.0.0/share/hadoop/common/lib/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/common/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/hdfs:/usr/hadoop/hadoop-3.0.0/share/hadoop/hdfs/lib/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/hdfs/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/mapreduce/lib/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/mapreduce/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/yarn:/usr/hadoop/hadoop-3.0.0/share/hadoop/yarn/lib/*:/usr/hadoop/hadoop-3.0.0/share/hadoop/yarn/*SSH_CONNECTION=127.0.0.1 59240 127.0.0.1 22HDFS_NAMENODE_OPTS=-Dhadoop.security.logger=INFO,RFASLESSOPEN=||/usr/bin/lesspipe.sh %sXDG_RUNTIME_DIR=/run/user/0HDFS_AUDIT_LOGGER=INFO,NullAppender

我现在想取里头:hadoop.home.dir=/usr/hadoop/hadoop-3.0.0 这个值,shell: cat /proc/10725/environ | 后面命令应该怎么筛选? 🙏

回复
阅读 1.4k
2 个回答

使用sed命令替换, 只保留正则hadoop\.home\.dir=[^* ]+匹配到的这部分

cat /proc/10725/environ | sed -E 's/.+(hadoop\.home\.dir=[^* ]+).+/\1/'

image.png

proc/10725/environ文件中其实是用\0分割变量与值的,所以有个非常巧妙的办法:

tr '\0' '\n' /proc/10725/environ | grep 'hadoop.home.dir='
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏