sed基础

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操作, 编写转换程序等

[root@localhost fsy]# sed  -n  ‘3p’   /etc/passwd      // 只打印第三行
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost fsy]#  sed -n ‘2p’   // 只多输出了第二行
aaa
bbb
bbb
accc^H^[[3~
ssdfs

fdfd
dds

[root@localhost fsy]# sed -n ‘2p’ < /etc/passwd   //  用sed实现标准输入
bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost fsy]# sed ‘3,6=’  passwd

[root@localhost fsy]# cat /etc/passwd | sed -n ‘2p’
bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost fsy]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@localhost fsy]# seq 10 | sed -n ‘5p’
5

sed可以对输出做一些处理,而不是只处理文件

[root@localhost ~]# ifconfig | sed -n 2p
          inet addr:192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost fsy]# cat -n passwd   // 空行加行号

[root@localhost fsy]# cat -b passwd   //  空行不加行号

[root@localhost fsy]# sed -n ‘/^root/p’ passwd  // 打印包含root的行
root:x:0:0:root:/root:/bin/bash

[root@localhost fsy]# sed -n ‘10,20p’ passwd   // 打印第10行到第20行的内容

[root@localhost fsy]# sed -n ’10,+20p’ passwd   //  打印第10行到第30行的内容

地址定界

[root@localhost fsy]# sed -n ‘/^h/,/^s/p’  passwd   // 打印h开头的行到s开头的行

[root@localhost fsy]# sed -n ’10,/^s/p’ passwd

[root@localhost fsy]# sed -n ‘/^s/,40p’ passwd

步进

[root@localhost fsy]# seq 10| sed -n  ‘1~2p’   // 取奇数行
1
3
5
7
9

[root@localhost fsy]# seq 10 |sed -n ‘2~2p’
2
4
6
8
10

[root@localhost ~]# seq 10 |sed ‘2~2d’
1
3
5
7
9

[root@localhost fsy]# cat passwd | sed ‘3,6a ==========================’

[root@localhost fsy]# cat passwd | sed ‘3~6a ==========================’

[root@localhost fsy]# cat passwd | sed ‘3,6a\                   ==========================’

[root@localhost fsy]# cat passwd | sed ‘3,6i\                   ==========================’            // 在前面插

[root@localhost fsy]# cat passwd | sed ‘3,6c\                   ==========================’                 // 替代

[root@localhost fsy]# cat passwd | sed ‘3,6a\   ==========================\n   +++++++++++++++++++++++’          // 插入两行

[root@localhost fsy]# cat passwd2 | sed -n ‘3,6w ff’
[root@localhost fsy]# cat ff
     3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4 adm:x:3:4:adm:/var/adm:/sbin/nologin
     5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6 sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost fsy]# cat passwd2 | sed ‘3,6r /etc/issue’

[root@localhost fsy]# sed -n  ‘3,6!p’ passwd2     // 取反

[root@localhost fsy]# seq 10 |sed -n ‘2~2!p’

[root@localhost fsy]# sed ‘2d’ f1
1
3
4
5
6
7
8
9
10

[root@localhost fsy]# sed -i ‘2d’ f1          //  真的把文件给改了
[root@localhost fsy]# cat f1
1
3
4
5
6
7
8
9
10

[root@localhost fsy]# sed -i.txt ‘2d’ f1              //  先做备份再修改文件
[root@localhost fsy]# cat f1.txt
1
2
3
4
5
6
7
8
9
10

搜索替代

[root@localhost fsy]# sed ‘s/root/Root/’ passwd
[root@localhost fsy]# sed ‘s/root/Root/g’ passwd

[root@localhost fsy]# sed -n ‘s/root/Root/gp’ passwd          // 只显示替代成功的行
Root:x:0:0:Root:/Root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -n ‘s/root/Root/w p1’ passwd     // 把结果保存到p1文件
[root@localhost fsy]# cat p1
Root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -n ‘s/root/Root/gw p1’ passwd
[root@localhost fsy]# cat p1
Root:x:0:0:Root:/Root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -i.bak ‘s/6.9/9.9/g’   /etc/centos-release 
[root@localhost fsy]# cat /etc/centos-release
CentOS release 9.9 (Final)

[root@localhost fsy]# cat /etc/selinux/config 

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

    enforcing – SELinux security policy is enforced.

    permissive – SELinux prints warnings instead of enforcing.

    disabled – No SELinux policy is loaded.

SELINUX=enforcing

SELINUXTYPE= can take one of these two values:

    targeted – Targeted processes are protected,

    mls – Multi Level Security protection.

SELINUXTYPE=targeted 

[root@localhost fsy]# sed ‘s/SELINUX=enforcing/SELINUX=disabled/’  /etc/selinux/config

[root@localhost fsy]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’  /etc/selinux/config

46分钟有总结

[root@localhost fsy]# sed -n ‘/^$/=’ /etc/fstab   //  显示空行的行号
1
19

[root@localhost fsy]# sed -n -e ‘/^s/=’ -e ‘/^U/p’   /etc/fstab
UUID=9341e6da-5470-4df8-89c5-bfbc3a689d8d /                       ext4    defaults        1 1
UUID=12c88f0f-aa56-4be1-9c87-eaf0cf524e75 /app                    ext4    defaults        1 2
UUID=20192758-4252-4bf6-83d4-52da93ffdab4 /boot                   ext4    defaults        1 2
UUID=567c9b8b-5207-4a4c-8548-9f5b6ee49c3a /home                   ext4    defaults        1 2
UUID=3ac9cd7c-8d23-43a6-a550-9f93df25f5cf swap                    swap    defaults        0 0
16
UUID=”5263027d-f571-4c4a-98d8-930e41e0e265″  /home  ext4   usrquota,grpquota 0 0

[root@localhost ~]# sed -n ‘/^$/=’ -e ‘/^U/=’  /etc/fstab
sed: can’t read /^$/=: No such file or directory
9
10
11
12
13
18

[root@localhost ~]# sed -n -e ‘/^$/=’ -e ‘/^$/p’  /etc/fstab
1

19

4

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig | sed   -e  ‘/Bcast/s/.r://’  -e  ‘/Bcast/s/B.//’                 // 多点替代

[root@localhost ~]# ifconfig | sed   -e  ‘/Bcast/s/.r://’  -e  ‘/Bcast/s/B.//’

[root@localhost ~]# ifconfig eth0 | sed -e ‘s/.inet addr://’ -e  ‘/Bcast/s/B.//’  -n -e 2p
192.168.1.128  

[root@localhost ~]# ifconfig |sed -e ‘s@.addr:@@’ -e ‘s@Bcast:.@@’  -n -e 2p
192.168.1.128  

取基名
echo  /etc/sysconfig/network-scripts/ |sed -r  ‘s@(^/.
/)([^/]+/?)@\2@’

取目录名
echo  /etc/sysconfig/network-scripts/ |sed -r  ‘s@(^/.*/)([^/]+/?)@\1@’

对/etc/fstab非#开头的加注释
sed -r  ‘s/(^[^#])/#\1/’ /etc/fstab 
sed -r  ‘s/^[^#]/#&/’ /etc/fstab

下面是sed高级用法

原创文章,作者:fsy,如若转载,请注明出处:http://www.178linux.com/74562

(0)
fsyfsy
上一篇 2017-05-01 21:27
下一篇 2017-05-01 22:52

相关推荐

  • PXE实践

    本篇只以记录个人部署pxe过程中所遇问题,至于原理,只做部分简单说明。 pxe部署必要软件: syslinux (用于提供引导中所必备文件) tftp(用于提供存放vmlinuz,initrd,syslinux.0等引导类文件) dhcp(用于自动获取IP包括指明去哪个主机获取syslinux.0文件) 最后还需要一个web或者ftp服务,已提供系统安装中所…

    Linux干货 2017-02-05
  • keepalived +LVS DR 双主互备模型实验

    keepalived +LVS DR 双主互备模型实验  实验环境介绍     操作系统:DR:centos 7.2 两个节点,都安装keepalived             &nbsp…

    Linux干货 2016-03-09
  • CentOS7中nmcli网络管理及使用详解

    一、网络接口配置工具    在CentOS7系统中,强烈推荐使用nmcli管理网卡。下面记录的是nmcli的使用详解。    网络接口配置工具NetworkManager(简称为nmcli),该命令的作用是:可以查询网络连接的状态,也可以用来管理网络(设置系统每个网卡的特性)。该命令如何使用呢,其实可以用"n…

    Linux干货 2016-09-11
  • zabbix之报警功能的实现

    一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是那个红色的ID了。 h…

    2014-11-12
  • 初识路由以及小实验

    路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。路由发生在OSI网络参考模型中的第三层即网路层。 初识路由以及小实验 根据实验的目的要求画出实验拓扑图 准备实验环境 根据实验拓扑图开始配置 配置计算机的IP: 配置路由器R1和R2的IP 配置路由 实验目的 实验准备 实验步骤 验证实验结果 实验目的 为了更好的了解路由,通过一个小…

    Linux干货 2016-11-24
  • 马哥教育网络班22期第3周课程作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@MyCloudServer ~]# who | cut -d " " -f1 |sort -u root 2、取出最后登录到当前系统的用…

    Linux干货 2016-09-19