sed流式编译器

一、概述

sed 是文本处理工具,读取文本内容,根据指定条件进行处理,可实现
增删改查的功能。 sed 依赖于正则表达式。

1、格式

sed ' 过滤 + 动作 ' 文件路径

2、选项

-e指定要执行的命令(操作),只有一个编辑命令(操作)时可省略
-n只输出处理后的行,读入时不显示,不源文件进行修改
-i直接修改源文件,不输出结果

二、编辑命令格式

'/ 地址 1 ,地址 2/ 操作 ( 参数 )'

1、地址

可为行数、正则表达式、 $ ,没有地址代表全文

2、操作

p打印(输出)
d删除整行
s替换字符串匹配
c替换整行
r读取指定文件,追加到后行
a追加到指定内容到行后
i追加指定内容到行前

w

另存为
n表示读入下一行内容
H复制到剪切板
g将剪切板中的内容覆盖到指定行
G将剪切板中的内容追加到指定行后

3、示例

1)准备文件
[root@localhost test]# vim test.txt
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
:wq
[root@localhost test]#
2p 打印

[root@localhost test]# sed -n '12p' test.txt #
输出第12⾏内容
HELLO
[root@localhost test]# sed -n '3,5p' test.txt # 输出
3~5⾏内容
good
goood
gooood
[root@localhost test]# sed -n 'p;n' test.txt #
输出奇数⾏
gd
good
gooood
glad
abcdEfg
60115127Z
010-66668888
IP 192.168.1.108
pay $180
[root@localhost test]# sed -n 'n;p' test.txt #
输出偶数⾏
god
goood
gold
gaad
food
HELLO
0666-5666888
IP 173.16.16.1
[root@localhost test]# sed -n '1,6{p;n}' test.txt # 输出1~6
⾏之间的奇数⾏(第1,3,5⾏)
gd
good
gooood
[root@localhost test]# sed -n '/H/p' test.txt # 输出
包含字⺟H的⾏
HELLO
[root@localhost test]# sed -n '/[A-Z]/p' test.txt # 输出所有
包含⼤写字⺟的⾏
abcdEfg
60115127Z
HELLO
IP 192.168.1.108
IP 173.16.16.1
[root@localhost test]# sed -n '$p' test.txt #
输出最后⼀⾏
pay $180
[root@localhost test]#
(3)d删除
[root@localhost test]# sed '16d' test.txt # 删除第十六
行
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
pay $180
[root@localhost test]# cat -n test.txt
1 gd
2 god
3 good
4 goood
5 gooood
6
7 gold
8 glad
9
10 gaad
11 abcdEfg
12 food
13
14 60115127Z
15 HELLO
16 010-66668888
17 0666-5666888
18 IP 192.168.1.108
19 IP 173.16.16.1
20 pay $180
[root@localhost test]# sed -i '/^$/d' test.txt # 删除
空行,^$:表示空行
[root@localhost test]# cat -n test.txt
1 gd
2 god
3 good
4 goood
5 gooood
6 gold
7 glad
8 gaad
9 abcdEfg
10 food
11 60115127Z
12 HELLO
13 010-66668888
14 0666-5666888
15 IP 192.168.1.108
16 IP 173.16.16.1
17 pay $180
[root@localhost test]# sed -e '1d' -e '3d' test.txt #
删除第1⾏和第3⾏
god
goood
gooood
gold
glad

gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]# sed -e '1d;3d' test.txt
# 同样,删除第1⾏和第3⾏
god
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]#
4s 替换字符串

[root@localhost test]# sed 's/o/O/g' test.txt # 将所
有⼩写o替换为⼤写O(g表示若同⼀⾏有多个⼩写o,全部替换,若不加g,则只
替换每⾏的第⼀个⼩写o)
gd
gOd
gOOd
gOOOd
gOOOOd
gOld
glad
gaad
abcdEfg
fOOd
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]# sed '/^IP/ s/^/#/' test.txt #
以IP开头的⾏,⾏⾸加上
#
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
#IP 192.168.1.108
#IP 173.16.16.1
pay $180
[root@localhost test]# sed 's/$/EOF/' test.txt # 在每
⾏⾏尾插⼊字符串EOF
gdEOF
godEOF
goodEOF
gooodEOF
goooodEOF
goldEOF
gladEOF
(5)c 替换整行
gaadEOF
abcdEfgEOF
foodEOF
60115127ZEOF
HELLOEOF
010-66668888EOF
0666-5666888EOF
IP 192.168.1.108EOF
IP 173.16.16.1EOF
pay $180EOF
[root@localhost test]# sed '20,25
s@/sbin/nologin@/bin/bash@' /etc/passwd
# 将/etc/passwd⽂件20~25⾏的/sbin/nologin替换为/bin/bash。如
果⽤s///的形式,将会多次使⽤转义符\,我们可以使⽤其他符号,如@进⾏分隔
5c 替换整行
[root@localhost test]# sed '2cAAAAAAA' test.txt #
将第2⾏替换为AAAAA
gd
AAAAAAA
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]# sed '5,$ cAAAAA\nBBBBB' test.txt
# 把第5⾏⾄最后⼀⾏的内容替换为两⾏,AAAAA和BBBBB(\n为换⾏)
gd
god
good
goood
AAAAA
BBBBB
[root@localhost test]#
6r 追加指定文件到行后
[root@localhost test]# sed '5r /etc/hostname' test.txt # 读
取/etc/hostname⽂件内容在第5⾏后
gd
god
good
goood
gooood
localhost.localdomain
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]#
7a 追加指定内容到行后
[root@localhost test]# sed '2aCCCCCCCCC' test.txt #
在第二行后追加9个C
gd
god
CCCCCCCCC
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]# sed '/[0-9]/a=====' test.txt #
在所有带数字的⾏下追
加====
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
=====
HELLO
010-66668888
=====
0666-5666888
=====
IP 192.168.1.108
=====
IP 173.16.16.1
=====
pay $180
=====
[root@localhost test]#
8i 追加指定内容到行前
[root@localhost test]# sed '2iCCCCC' test.txt # 在第
二行之前追加5个C
gd
CCCCC
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]#
9w 另存为
[root@localhost test]# sed '15,16w 123.txt' test.txt
# 将15~16⾏内容另存到123.txt⽂件中
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
IP 173.16.16.1
pay $180
[root@localhost test]# cat 123.txt
IP 192.168.1.108
IP 173.16.16.1
[root@localhost test]#
10H G 复制剪切粘贴
H :复制到剪贴板
G :将剪贴板中的内容追加到指定行后

[root@localhost test]# sed '/IP/ {H;d};$G' test.txt
# 将包含字⺟IP的⾏剪切到最后⼀⾏下
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
pay $180
IP 192.168.1.108
IP 173.16.16.1
[root@localhost test]# sed '1,5H;15,16G' test.txt #
将1~5⾏内容复制到15⾏、16⾏下
gd
god
good
goood
gooood
gold
glad
gaad
abcdEfg
food
60115127Z
HELLO
010-66668888
0666-5666888
IP 192.168.1.108
gd
god
good
goood
gooood
IP 173.16.16.1
gd
god
good
goood
gooood
pay $180
[root@localhost test]#

三、sed 命令引用变量

1. sed 命令使用单引号的情况下,可以使用 '"$var"' 引用(单引号,然后
双引号,变量):
sed -i '2s/node_base/'" $i "'/' /etc/libvirt/qemu/ $i .xml

1. sed 命令中使用双引号的情况下,直接 shell command 或者 $(shell
command) 引用命令执行。
sed -i "2s/node_base/ $i /" /etc/libvirt/qemu/ $i .xml
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值