第十三天-linux正则表达式及重点命令

正则表达式:
  简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,通过特殊的符号辅助,我们可以快速的过滤,替换某些特定的字符串。
  运维工作中,会有大量的访问日志,错误日志。如何能快速的过滤出我们需要的内容,这就要靠正则表达式。
  awk,sed,grep(egrep)linux三剑客想要工作的更高效,那么一定离不开正则表达式的配合。
  我们想要玩好三剑客,主要是awk,sed,grep。三剑客的正则表达式。


正则表达式实际就是一些特殊的字符,赋予了他特等的含义。
1)^word        搜索以word开头的
2)word$        搜索以word结尾的
3).              代表且只能代表任意一个字符
4)                 转义字符,转义符号,让有着特殊身份意义的字符,脱掉马甲,还原原型。
5)*                 重复0个或多个前面的一个字符
6).*                匹配所有字符。^.*以任意多个字符开头
7)[]                字符集合,重复特殊字符的符号
8)[^word]       匹配不包含^后的任意字符的内容
9)a{n,m}      重复n到m次,前一个字符
    {n,}          重复至少n次,前一个字符
    {n}           重复n次,前一个字符

扩展的正则表达式:ERE
1)+                重复一个或一个以上前一个字符
2)?                重复0个或0以上个前面的字符
3)|                 用或的方式查找多个字符串
实战例题
1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求使用命令取得644或0644这样的数字。

方法1:
xiaorui@xiaorui:~/test$ ll etiantian
-rw-r--r-- 1 xiaorui xiaorui 0 11月 25 21:28 etiantian
xiaorui@xiaorui:~/test$ ll etiantian |cut -c 2-10
rw-r--r--
xiaorui@xiaorui:~/test$ ll etiantian |cut -c 2-10|tr rwx- 4210
420400400
xiaorui@xiaorui:~/test$ ll etiantian |cut -c 2-10|tr rwx- 4210|awk -F "" '{print $1}'
4
xiaorui@xiaorui:~/test$ ll etiantian |cut -c 2-10|tr rwx- 4210|awk -F "" '{print $1+$2+$3 $4+$5+$6 $7+$8+$9}'
644
方法2:
xiaorui@xiaorui:~/test$ stat etiantian
  文件:"etiantian"
  大小:0             块:0          IO 块:4096   普通空文件
设备:802h/2050d    Inode:23200567    硬链接:1
权限:(0644/-rw-r--r--)  Uid:( 1000/ xiaorui)   Gid:( 1000/ xiaorui)
最近访问:2015-11-25 21:28:48.071446235 +0800
最近更改:2015-11-25 21:28:48.071446235 +0800
最近改动:2015-11-25 21:29:07.707803664 +0800
创建时间:-
xiaorui@xiaorui:~/test$ stat etiantian |sed -n '4p'|awk -F '[(/]' '{print $2}'
0644
方法3:
xiaorui@xiaorui:~/test$ stat etiantian |awk -F '[(/]' 'NR==4 {print $2}'
0644
方法4:
xiaorui@xiaorui:~/test$ stat etiantian |head -4|tail -1|awk -F '[(/]' '{print $2}'
0644

2.linux下通过mkdir命令创建一个新目录/home/xiaorui/ett,ett的硬链接数是多少,为什么?
 在ett下再创建一个test目录,ett的硬链接数又是多少?为什么?

xiaorui@xiaorui:~$ mkdir ett
xiaorui@xiaorui:~$ ls -ld ett/
drwxrwxr-x 2 xiaorui xiaorui 4096 11月 25 22:15 ett/
xiaorui@xiaorui:~$ cd ett/
xiaorui@xiaorui:~/ett$ mkdir test
xiaorui@xiaorui:~/ett$ ls -ld ../ett/
drwxrwxr-x 3 xiaorui xiaorui 4096 11月 25 22:16 ../ett/
xiaorui@xiaorui:~/ett$ ll -i
24512863 drwxrwxr-x  3 xiaorui xiaorui 4096 11月 25 22:16 ./
23068674 drwxr-xr-x 34 xiaorui xiaorui 4096 11月 25 22:15 ../
24512865 drwxrwxr-x  2 xiaorui xiaorui 4096 11月 25 22:16 test/
xiaorui@xiaorui:~/ett$ ll -id /home/xiaorui/ett/
24512863 drwxrwxr-x 3 xiaorui xiaorui 4096 11月 25 22:16 /home/xiaorui/ett//
xiaorui@xiaorui:~/ett/test$ ls -lai
24512865 drwxrwxr-x 2 xiaorui xiaorui 4096 11月 25 22:16 .
24512863 drwxrwxr-x 3 xiaorui xiaorui 4096 11月 25 22:16 ..

当新创建一个目录时,此目录的硬链接数为2这是因为:
1、创建的目录本身为一个硬链接。
2、目录ett下隐藏目录.(点号)为创建目录的有一个硬链接,因此其硬链接数为2。
  当在新创建目ett下再创建一个目录test时,ett目录的硬链接数为3,这是因为,在新创建的test目录下有一个隐藏..(两个点号)为ett的又一个硬链接。

3.请执行命令取出linux中wlan0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。

方法1:
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet"
          inet 地址:192.168.1.111  广播:192.168.1.255  掩码:255.255.255.0
          inet6 地址: fe80::162d:27ff:fefd:c215/64 Scope:Link
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "
          inet 地址:192.168.1.111  广播:192.168.1.255  掩码:255.255.255.0
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|awk '{print $2}'
地址:192.168.1.111
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|awk '{print $2}'|awk -F ':' '{print $2}'
192.168.1.111
方法2:
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|cut -d ':' -f2
192.168.1.111  广播
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|cut -d ':' -f2|cut -d ' ' -f1
192.168.1.111
方法3:
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|awk -F "[ :]" '{print $13}'
192.168.1.111
方法4:
xiaorui@xiaorui:~$ ifconfig wlan0|grep "inet "|awk -F "[ :]+" '{print $4}'
192.168.1.111
方法5:
xiaorui@xiaorui:~$ ifconfig wlan0|awk -F "[ :]+" 'NR==2{print $4}'
192.168.1.111
方法6:
xiaorui@xiaorui:~$ ifconfig wlan0|sed -n '2p'|sed  's#^.*地址:##g'|sed 's# 广播:.*$##g'
192.168.1.111 
方法7:
xiaorui@xiaorui:~$ ifconfig eth0|sed -nr '2s#^.*r:(.*)B.*$#1#gp'
192.168.1.71
方法8:
xiaorui@xiaorui:~$ ifconfig eth0 | awk -F [: ] 'NR==2 { print $13 }'
192.168.1.71

4.请给出默认情况下eth0网卡配置文件的路径及客户端DNS的路径。
     eth0网卡配置路径:/etc/sysconfig/network-scripts/ifcfg-eth0
     客户端DNS的路径 :/etc/resolv.conf

5.推荐老男孩老师两篇博文:
  Linux系统基础网络配置老鸟精华篇
  深入浅出route命令小结
  

原文地址:https://www.cnblogs.com/migongci0412/p/5003091.html