每日一练(linux)第七天

76 阅读3分钟

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

sed基础用法: 1 模版:

  sed -n '4p'|sed -r 's#^.*|.*$##g'
   实例:
   stat /etiantian |sed -n '4p'|sed -r 's#^.*(0|/.*$##g'
   解析:| 表示管道符号 -n 表示识别正则符号 

2 模版:

  sed -n '4p'|sed -r 's#^.*(.*).*$#/1#g'
   实例:
    stat /etiantian |sed -n '4p'|sed -r 's#^.*\(0(.*)/-.*$#\1#g'
  awk:
   awk 'NR==4'|awk -F "[0/]" '{print $1}'
   实例:
   stat /etiantian |awk 'NR==4'|awk -F "[0/]" '{print $2}'

解析:NR==4 表示取出第几行 -F 指定分隔符 [0/]分隔符从0开始到/结束 0前面的为第一行后面的为第二行

01.如何取得/etiantian 文件的权限对应的数字内容。

 如-rw-r--r-- 为644.要求使用命令取得644 这样的数字
   利用stat命令获取,输出信息中的权限数值信息
   方法一:利用sed命令
   [root@fu ~]# stat /etiantian |sed -n '4p'|sed -r 's#^.*(0|/.*$##g'
   sed: -e expression #1, char 15: Unmatched ( or \(
   [root@fu ~]# stat /etiantian |sed -n '4p'|sed -r 's#^.*\(0|/.*$##g'
   644
   
   [root@fu ~]# stat /etiantian |sed -n '4p'|sed -r 's#^.*\(0(.*)/-.*$#\1#g'
   644
   
   方法二:利用awk命令
   [root@fu ~]# stat /etiantian |awk 'NR==4'|awk -F "[0/]" '{print $2}'
   644
   
   方法三:运维思想:(了解) 一个命令输出的内容有我们想要的结果,就可以利用命令的参数把结果显示出来
   [root@fu ~]# stat -c%a /etiantian
   644

02 .linux下通过 mkdir 命令创建一个新的目录/oldboy/ett.它的硬链接数是多少,为什么? 如果在/oldboy/ett下面再创建一个目录 test 再问/oldboy/ett的硬链接数是多少?为什么?解答

[root@fu ~]# mkdir -p /oldboy/ett
[root@fu ~]# ll -d /oldboy/ett
drwxr-xr-x 2 root root 4096 Jul  6 14:09 /oldboy/ett
[root@fu ~]# ll -di /oldboy/ett
2228230 drwxr-xr-x 2 root root 4096 Jul  6 14:09 /oldboy/ett
[root@fu ~]# mkdir /oldboy/ett/oldboydir
[root@fu ~]# ll -di /oldboy/ett
2228230 drwxr-xr-x 3 root root 4096 Jul  6 14:12 /oldboy/ett

[root@fu ett]# ll /etc|grep '^d'|wc -l
76

01.如何截取文件数据信息(正则表达) 截取ifconfig eth0命令输出的IP地址信息

方法一:利用sed(替换数据信息)
   eth0      Link encap:Ethernet  HWaddr 00:0C:29:02:29:D9  
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe02:29d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40990 errors:0 dropped:0 overruns:0 frame:0
          TX packets:34427 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3638608 (3.4 MiB)  TX bytes:10754563 (10.2 MiB)
   1)定位截取内容所在的行
	ifconfig eth0 |sed -n '2p'
	[root@fu ~]# ifconfig eth0 |sed -n '2p'
     inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
  
2)定位截取内容所在列
三种方法:
	1.利用替换功能
	[root@fu ~]# ifconfig eth0 |sed -n '2p'|sed 's#^.*r:##g'
    10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
    [root@fu ~]# ifconfig eth0 |sed -n '2p'|sed 's#^.*r:##g'|sed 's# B.*$ ##g'
    10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
    [root@fu ~]# ifconfig eth0 |sed -n '2p'|sed 's#^.*r:##g'|sed 's# Bc.*$ ##g'
    10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
    [root@fu ~]# ifconfig eth0 |sed -n '2p'|sed 's#^.*r:##g'|sed 's#  Bc.*$##g'
    10.0.0.200
    
	2.利用替换功能
	[root@fu ~]# ifconfig eth0 |sed -n '2p'|sed -r 's#^.*r:| Bc.*$##g'
    10.0.0.200 
    
	扩展:取第二个地址
	[root@fu ~]# ifconfig eth0 |sed -n '2p'|sed -r 's#^.*t:|  M.*$##g'
    10.0.0.255
	
	3.利用后项引用前项的方法
	[root@fu ~]# ifconfig eth0 |sed -n '2p'|sed -r 's#^.*r:(.*) Bc.*$#\1#g'
    10.0.0.200 
    
	扩展:取第三个地址
	[root@fu ~]# ifconfig eth0 |sed -n '2p'|sed -r 's#^.*k:(.*)#\1#g'
    255.255.255.0
   
   终极解法:
   sed -n '2p==条件'  sed -r 's#^.*k:(.*)#\1#g==具体做的事情'
   
   sed -nr '2s#^.*:(.*)  Bc.*$#\1#gp'
   [root@fu ~]# ifconfig eth0|sed -nr '2s#^.*:(.*)  Bc.*$#\1#gp'
   10.0.0.200
 方法二:利用awk
   1)定位截取内容所在的行
   [root@fu ~]# ifconfig eth0 |awk 'NR==2'
    inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0

	2)定位截取内容所在列
	[root@fu ~]# ifconfig eth0|awk 'NR==2'|awk -F '[ :]+' '{print $4}'
    10.0.0.200
   方法三:利用|指定分隔符
   
   [root@fu ~]# ifconfig eth0|awk 'NR==2'|awk -F "addr:|  Bcast:" '{print $2}'
   10.0.0.200

	终极解法:
	awk 'NR==2==条件'   awk -F '[ :]+' '{print $4}==命令'
	
	awk -F "[ :]+" 'NR==2{print $4}'
	[root@fu ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
    10.0.0.200

    [root@fu ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
    10.0.0.200
 
    inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
                    分隔              分隔
方法三:利用grep
   1)定位截取内容所在的行
   [root@fu ~]# ifconfig eth0 |grep 'cast'
    inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0

2)定位截取内容所在列

   方法一:快速定位
   grep '10.0.0.100'
   
   方法二:正则方式取出信息
   ifconfig eth0|egrep 'Bcas'|egrep '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -o|head -1
   10.0.0.200
   
   ifconfig eth0|egrep 'Bcas'|egrep '([0-9]+\.?){4}'
   
   补充:在centous7,获取IP地址的方法
   IP address show eth0
   ip a s eth0
   ip a