shell 使用正则表达式从字符串中提取子串

2021-01-21

grep 指令,-E 支持正则、-o 打印匹配项

echo "libgcc-4.8.5-4.h5.x86_64.rpm" | grep -Eo "[0-9]+\.[0-9]+.*x86_64"

4.8.5-4.h5.x86_64

 

sed 指令,-r 使用扩展的正则、\1 获取第一个匹配分组,下面这个命令指([0-9]+\.[0-9]+.*)

echo "libgcc-4.8.5-4.h5.x86_64.rpm" | sed -r "s/libgcc-([0-9]+\.[0-9]+.*)\.rpm/\1/g"

4.8.5-4.h5.x86_64

 

比如想取 libgcc ,可以如下

echo "libgcc-4.8.5-4.h5.x86_64.rpm" | sed -r "s/(libgcc)-([0-9]+\.[0-9]+.*)\.rpm/\1/g"

libgcc

 

线上 ps -ef | grep weblogic.Name 会显示如下这段

weblogic 16906  3797  0 Jan11 ?        02:16:42 /opt/jdk1.7.0_271/jre/bin/java -Dweblogic.Name=server1 -Dbea.home=/opt/Oracle/Middleware -Djava.security.policy=/opt/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy
weblogic 13303 13159  0 09:58 pts/1    00:00:00 grep weblogic.Name

 

去除 grep weblogic.Name 本身,使用 grep -v grep

仅获取 pid 16906 和 -Dweblogic.Name=server1 服务名称

方式一:

sed 's/ -Dbea.home.*//' | sed 's/ -Djava.security.policy.*//' | sed 's/^\w* *//' | sed 's/[[:space:]].*java//'
echo 'weblogic 16906  3797  0 Jan11 ?        02:16:42 /opt/jdk1.7.0_271/jre/bin/java -Dweblogic.Name=server1 -Dbea.home=/opt/Oracle/Middleware -Djava.security.policy=/opt/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy' | sed 's/ -Dbea.home.*//' | sed 's/ -Djava.security.policy.*//' | sed 's/^\w* *//' | sed 's/[[:space:]].*java//'

结果:

16906 -Dweblogic.Name=server1


方式二:

ConstXiong 备案号:苏ICP备16009629号-3