Linux三剑客之sed

Linux三剑客之sed

概述:

sed是Stream Editor (字符流编译器)的缩写,简称流编译器。sed是操作、过滤和转换文本内容的强大工具;其中常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的是过滤(过滤指定字符)、取行。

原理内容:

sed主要是对处理文本文件——逐行读取文件内容(sed模式空间处理内存数据),当读到匹配的行就根据指令输出到屏幕上,当读到不匹配的行就取消输出到屏幕上

sed  选项   命令字符   文件内容
常用的命令选项:
a:追加  向匹配行后面插入内容
c:更改  更改匹配行的内容
i:插入  向匹配行前插入内容
d:删除  删除匹配的内容
s:替换  替换掉匹配的内容(global:全局替换)
p:打印  打印出匹配的内容,通常与-n选项和用
​
-r:使用扩展正则表达式
-e:多次编辑,不需要正则表达式
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出

sed的匹配范围:

空地址  全文处理
单地址  指定某一行
/pattern/  被匹配到的某一行
范围区间  10,20(表示第十行到二十行)  10,+5(表示第10行向下5行)  
步长     1~2 表示1,3,5,7,9......(奇数行)
         2~2 表示2,4,6,8......
实例

1、输出第二行和第三行的内容

[root@node1 ~]# sed -n "2,3p" test.sh     # -n:表示取消默认输出,否则会输出所有内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

2、过滤出含有root的字符

[root@node1 ~]# sed -n "2,3p" test.sh 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

3、删除含有root的行。

[root@node1 ~]# sed -n "/game/p" test.sh 
games:x:12:100:games:/usr/games:/sbin/nologin
[root@node1 ~]# sed -n "/game/d" test.sh -i   # -i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改

4、删除某几行

[root@node1 ~]# sed  '25,$d' test.sh     # 输出未删除的行,未对test.sh做任何操作
#! /bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@node1 ~]# sed  -i '25,$d' test.sh     # 不会输出任何内容,但是已经对test.sh文件做了处理——删除该文件中25行以后的行数

5、将文件中的root全部替换为ROOT

[root@node1 ~]# sed -n "/root/p" test.sh    # 查看文件中root所在的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@node1 ~]# sed "s/root/ROOT/g" test.sh -i     #全局替换
[root@node1 ~]# sed -n "/ROOT/p" test.sh 
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
operator:x:11:0:operator:/ROOT:/sbin/nologin
补充:将文件中的root全部替换为ROOT,并且将
[root@node1 ~]# sed -n "/etcd/p" test.sh      # 首先查看文件中etcd所在的行
etcd:x:996:992:Etcd user:/home/etcd:/sbin/nologin
[root@node1 ~]# sed -e "s/etcd/ETCD/g" test.sh  -e "s/root/ROOT/g" -i   # 同时替换两个内容
[root@node1 ~]# sed -n "/ETCD/p" test.sh 
ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin

6、添加文件

[root@node1 ~]# sed "2a ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin" test.sh  # 把ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin这行内容添加到文件的第三行,但是不对文本做任何操作
# a:表示在某一行后插入
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin
[root@node1 ~]# sed  -i "2a ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin" test.sh  # 把ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin这行内容添加到文件的第二行的后一行,sed操作写入文件中
​
# i:表示在某一行前加入
[root@node1 ~]# sed  -i "2i ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin" test.sh   # 把ETCD:x:996:992:Etcd user:/home/ETCD:/sbin/nologin这行内容添加到文件的第二行的前一行,sed操作写入文件中
# 如果需要插入多行内容——  \n+下一行内容

7、取出eth0中的IP地址

[root@node1 ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.4  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::216:3eff:fe38:7026  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:38:70:26  txqueuelen 1000  (Ethernet)
        RX packets 9979184  bytes 4226920510 (3.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8305305  bytes 722871000 (689.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 [root@node1 ~]# ifconfig eth0 | sed -n "2p" | sed "s/^.*inet//" | sed "s/net.*$//"
 10.0.0.4        
 #                 获取该网卡信息    截取第二行      去掉ip地址之前字符     去掉ip地址之前字符
 
 [root@node1 ~]# ifconfig eth0 | sed -e "2s/^.*inet//" -n  -e "2s/net.*//p" -n
 10.0.0.4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值