linux正则表达式企业级深度实践案例1

时间:2021-01-18 09:13:33

linux正则表达式结合三剑客企业级实践:

1、取系统ip

[root@redhat~]#  ifconfig  eth0

解答:

替换命令:

sed  's#支持正则位置##g'  file

先取第2行:

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2p '

inet  addr:192.168.31.135     Bcast:192.168.31.255     Mask:255.255.255.0

^ .*匹配,如果不给目标前的固定结尾就会匹配到行尾,结果就匹配一行

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2p ' | sed  ' s#^ .*##g '

对目标前的内容匹配替换:

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2p ' | sed  ' s#^ .*dr :##g '

192.168.31.135     Bcast:192.168.31.255     Mask:255.255.255.0

对目标后的内容匹配替换:

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2p ' | sed  ' s#^ .*dr :##g ' | sed  ' s#B.*$##g '

192.168.31.135  <==这里结尾有两个空格

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2p ' | sed  ' s#^ .*dr :##g ' | sed  ' s#        B.*$##g '

192.168.31.135  <==这里结尾无空格

sed  -n  's#支持正则位置##gp'  file

inet  addr:192.168.31.135  Bcast:192.168.31.255  Mask:255.255.255.0

处理技巧:

匹配需要的目标(获取的字符串如上文的ip)前的字符串一般用以..开头(^.*)来匹配开头,匹配的结尾写上实际的字符,

如:  " ^.*addr: " 表达式就匹配 "    inet  addr: "  ,而处理需要的目标后的内容一般在匹配的开头写上实际的字符,而结尾是用以...结尾(.*$)来匹配。如:Bcast: .*$ 部分表示匹配 "Bcast: 192.168.31.255  Mask:255.255.255.0"。

方法2:

替换命令1:

sed  -nr  ' s#支持正则位置##gp '  file

指定行号:s前的2为行号

sed  -nr  ' 2s#支持正则位置##gp '  file

解答:

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' s#^ .*adrr :##g ' | sed  -n  ' s#  Bc.*$##gp '

192.168.31.135

[root@redhat~]#  ifconfig  eth0 | sed  -n  ' 2s#^ .*adrr :##g ' | sed  -n  ' s#  Bc.*$##gp '

192.168.31.135

sed的后向引用:

sed  -n  ' s#() ()#\1\2#gp '  file

当在前面匹配部分用小括号的时候,第一个括号内容,可以在后面部分用\1输出。

第一个括号内容,可以在后面部分用\2输出。

[root@redhat~]#  echo  I  am  redhat  linux.  >a.txt

[root@redhat~]#  cat  a.tet

I  am  redhat  linux.

[root@redhat~]#  sed  -n  ' s#^ .*m  ##gp '  a.txt

redhat  linux.

[root@redhat~]#  sed  -nr  ' s#^ .*m  (.*)  l.*$#\l#gp '  a.tet

redhat

[root@redhat~]#  ifconfig  eth0 | sed  -nr  ' s#^ .*dr:(.*)  B.*$#\l#gp '