「这是我参与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