04.sed
# 01. sed作用
**更多详细内容参考:**https://www.cnblogs.com/xiaonq/p/11969744.html
# 1.1 sed作用
- sed 命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式空间。
- 然后再将下一行读入模式空间进行处理输出,以此类推,直到最后一行。
- 还有一个暂存空间,可以暂时存放一些处理的数据,但不能直接输出,只能放到模式空间输出。
- 这两个空间其实就是在内存中初始化的一个内存区域,存放正在处理的数据和临时存放的数据
# 1.2 sed常用参数
'''常用选项 '''
-n # 不打印模式空间
-e # 执行脚本、表达式来处理
-f # 执行动作从文件读取执行
-i # 修改原文件
-r # 使用扩展正则表达式
1
2
3
4
5
6
2
3
4
5
6
# 1.3 sed常用命令
'''常用命令 '''
s/regexp/replacement/ # 替换字符串
p # 打印当前模式空间
P # 打印模式空间的第一行
d # 删除模式空间,开始下一个循环
D # 删除模式空间的第一行,开始下一个循环
= # 打印当前行号
a \text # 当前行追加文本
i \text # 当前行上面插入文本
c \text # 所选行替换新文本
q # 立即退出 sed 脚本
r # 追加文本来自文件
w filename # 写入当前模式空间到文件
! # 取反、 否定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.4 sed常用地址
'''常用地址 '''
$ # 匹配最后一行
/regexp/ # 正则表达式匹配行
number # 只匹配指定行
addr1,addr2 # 开始匹配 addr1 行开始,直接 addr2 行结束
addr1,+N # 从 addr1 行开始,向后的 N 行
addr1,~N # 从 addr1 行开始,到 N 行结束
1
2
3
4
5
6
7
2
3
4
5
6
7
# 02.sed常用方法
# 2.1 sed常用方法
nl /etc/passwd | sed '2,5d' # 将2~5行内容删除,然后打印到屏幕上
nl /etc/passwd | sed '2,5c "new content"' # 将2~5行的内容替换成字符串 "new content"
nl /etc/passwd | sed '/root/d' # 删除/etc/passwd所包含root的行
nl /etc/passwd | sed -e '3,$d' -e 's/root/mewusername/' # 提取到前两行数据,并将 root替换成 newusername
1
2
3
4
2
3
4
# 2.2 sed匹配打印
tail /etc/services |sed -n '/^blp5/p' # 打印匹配 blp5 开头的行
tail /etc/services |sed -n '1p' # 打印第一行
tail /etc/services |sed -n '1,3p' # 打印第一行至第三行
seq 10 |sed -n '1~2p' # 打印奇数行
tail /etc/services |sed -n '$p' # 打印最后一行
tail /etc/services |sed -n '$!p' # 不打印最后一行
tail /etc/services |sed -n '/^blp5/,/^com/p' # 匹配以"blp5开头"到"com开头"的所有行
tail /etc/services |sed -n '/blp5/,$p' # 匹配以"blp5"开头行到最后一行
tail /etc/services |sed -n "$a,3p" # 引用系统变量,用引号
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 2.3 sed匹配删除
tail /etc/services |sed '/blp5/d' # 删除包含"blp5"的行
tail /etc/services |sed '1d' # 删除第一行
tail /etc/services |sed '1~2d' # 删除第一到第二行
sed '/^#/d;/^$/d' /etc/nginx/nginx.conf # 去除空格或开头#号的行
1
2
3
4
2
3
4
# 2.4 sed匹配替换
tail /etc/services |sed 's/blp5/test/' # 替换 blp5 字符串为 test
tail /etc/services |sed -n 's/^blp5/test/p' # 替换开头是 blp5 的字符串并打印
tail /etc/services |sed 's/48049/&.0/' # 使用&命令引用匹配内容并替换
tail /etc/services | sed '1,4s/blp5/test/' # 将1到4行的"blp5"替换成"test"
tail /etc/services | sed '/48129\/tcp/s/blp5/test/' # 匹配"48129/tcp"并将此行的"blp5"替换成"test"
tail /etc/services |sed -e '1,2d' -e 's/blp5/test/' # 删除前两行并将"blp5"替换成"test"
1
2
3
4
5
6
2
3
4
5
6
# 2.5 sed添加新内容
i: 匹配行上面添加
a: 匹配航下面添加
c: 将匹配航替换成新内容
1
2
3
2
3
tail /etc/services |sed '/blp5/i \test' # 在 blp5 上一行添加 test
tail /etc/services |sed '/blp5/a \test' # 在 blp5 下一行添加 test
tail /etc/services |sed '/blp5/c \test' # 匹配"blp5"的行替换成"test"
tail /etc/services |sed '2a \test' # 在第二行下面添加"test"
1
2
3
4
2
3
4
# 2.6 sed文本操作
# vim a.txt : 编写一个测试文件
1 2 3
4 5 6
7 8 9
1
2
3
4
2
3
4
tail /etc/services |sed '/blp5/r a.txt' # 将文件读取追加到匹配行下面
tail /etc/services |sed '/blp5/w b.txt' # 将匹配行写入"b.txt"
1
2
2
上次更新: 2024/3/13 15:35:10