sed的高级用法
1.如何把网卡改成传统模式的网卡
1)第一步
*1.用后向引用
[root@centos7 ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet" GRUB_DISABLE_RECOVERY="true" [root@centos7 ~]# sed -i -r '/GRUB_CMDLINE_LINUX=/s#(.*)"$#\1 net.ifnames=0"#' /etc/default/grub [root@centos7 ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0" GRUB_DISABLE_RECOVERY="true"
*2.不分组
sed -i -r '/GRUB_CMDLINE_LINUX=/s#"$# net.ifnames=0"#' /etc/default/grub
2)第二步
[root@centos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-b57bc3ff91254e2dbb9727e060abf5c1 Found initrd image: /boot/initramfs-0-rescue-b57bc3ff91254e2dbb9727e060abf5c1.img done
3)第三步
reboot
[root@centos7 ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.93.128 netmask 255.255.255.0 broadcast 192.168.93.255
inet6 fe80::740b:d22d:a3bf:c253 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:82:be:a5 txqueuelen 1000 (Ethernet)
RX packets 144 bytes 31547 (30.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 124 bytes 18553 (18.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2.怎么让自己的网卡写成一个固定的(需要完成1)
[root@centos7 ~]# cd /etc/sysconfig/network-scripts/ [root@centos7 network-scripts]# rm -rf ifcfg-ens33 [root@centos7 network-scripts]# touch ifcfg-eth0 [root@centos7 network-scripts]# vim ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.8 #每个主机IP不同 PREFIX=24 GATEWAY=10.0.0.2 DNS1=10.0.0.2 DNS2=180.76.76.76 ONBOOT=yes
3.sed命令还支持变量
[root@centos7 data]# name=root
[root@centos7 data]# sed -nr '/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
现在我想知道用这种行不行
sed -nr '/$name/p' /etc/passwd
答案是不行,因为我们用的是单引号。那该怎么办:
1)换双引号
[root@centos7 data]# sed -nr "/$name/p" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
2)在变量前后加单引号
[root@centos7 data]# sed -nr '/'$name'/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
4.变量实现多点编辑配置文件
先安装一下这个
yum -y install httpd
然后更改/etc/httpd/conf/httpd.conf中的内容
[root@centos7 data]# port=8080 [root@centos7 data]# sed -ri.bak -e 's/^Listen 80/Listen '$port'/' -e "/ServerName/c ServerName `hostname`:$port" /etc/httpd/conf/httpd.conf
5.q退出sed
[root@centos7 data]# seq 10 > test.txt [root@centos7 data]# sed 5q test.txt 1 2 3 4 5
6.sed高级用法
sed除了模式空间(模式空间相当于sed里面一个缓冲区,这个缓冲区每处理一个文件的行,他都会把这一行读入到模式空间中,在这个模式空间中来执行相关指令),在sed高级用法中,我们增加了一个新的空间,叫Holdspace保持空间,也就是说,sed里有两个空间了,这个Hold Space相等于增加了一个新的空间,这个新的空间可以带来什么好处?
就是让我们处理文件的时候,有一个临时存放中间数据的空间,而我们原来只有一个模式空间,这个模式空间它处理不完,那么也会被新的读入的行覆盖,所以我们现在多增加一个Hold Space。
7.下图便于我理解
8.sed高级用法:P
打印模式空间开端到\n(换行)内容,并且追加到默认输出之前,也就意味着,在模式空间可以换多行,以前我们认为只能换一行,实际上,它是可以换多行的,为什么允许换多行?
因为有了Hold Space了,Hold Space里面将来处理完以后,这里面行不一定是一行,可以有多行,既然有多行,那么P把其中的第一行打印出来,后面就不打了,p有啥打啥。
9.sed高级用法:h
把模式空间中的内容覆盖至保存空间中
10.sed高级用法:H
把模式空间中的内容追加至保持空间中
11.sed高级用法:g
把保持空间取出数据覆盖至模式空间,和h相反
12.sed高级用法:G
从保持空间取出数据追加至模式空间,和H相反
13.sed高级用法:x
把模式空间的内容和保持空间的内容进行互换
14.sed高级用法:n
读取匹配的行的下一行覆盖到模式空间
什么叫下一行,比如说我们现在读了第一行进来,见到n,他就把第二行也读了进来并覆盖了第一行
15.sed高级用法:N
读取匹配到的行的下一行追加至模式空间
16.sed高级用法:d
删除模式空间中的全部行
17.sed高级用法:D
如果模式空间也含换行符,则删除直到第一个换行符的模式空间的文本(说白了,就是删除第一行)
18.范例一:
[root@centos8 ~ 689]#seq 10 | sed -n 'n;p' 2 4 6 8 10
用sed高级用法打印文本偶数行
所以我们结合之前学的就有4种取偶数行的用法
seq 10 | sed -n '2~2p'
seq 10 | sed -n '1~2!p'
seq 10 | sed '1~2d'
seq 10 | sed -n 'n;p'
19.范例二:
[root@centos8 ~ 693]#seq 10 | sed 'N;s/\n//' 12 34 56 78 910
这个就是把奇数偶数显示成一行
20.范例三:
[root@centos8 ~ 694]#seq 10 | sed '1!G;h;$!d' 10 9 8 7 6 5 4 3 2 1
逐步分析:
1!G:不是第一行执行G
h:执行h
$!d:不是结尾执行d
所以合起来就是将文本的行倒了过来。
当然还有一种方法
[root@centos8 ~ 695]#seq 10 | tac 10 9 8 7 6 5 4 3 2 1
2022-2-4 18:33