linux三剑客——sed
简介
Linux三剑客主打信息处理,三剑合璧,几乎能满足你所有的信息需求。其中,grep专攻查找,sed精通编辑,awk主打分隔提取。
sed
sed是操作、过滤和转换文本内容的强大工具,常用功能增删改查,过滤,取行。
sed从流或文件中读取内容在**模式空间(缓冲区)**中,读取一行处理一行,并将处理后的内容输出。
命令格式
sed [选项] ''操作' 文件名
或者 文件流 | sed [选项] '操作'
操作选项
p
: 打印,可指定行、也支持正则表达式;需配合-n,否则会叠加默认输出,输出两次。
默认输出
# 输出clean.log内容
[root@prod-pve-packet-gitlab-runner-003 czx]# sed -n 'p' clean.log
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
[20230715-03:00:01]: less than 50%, do nathing
指定行
# 输出第一行
[root czx]# sed -n '1p' clean.log
[20230620-082401]: less than 50%, do nathing
# 输出3-6行
[root czx]# sed -n '3,6p' clean.log
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
正则表达式
# 输出[20230620开头的行
[root czx]# sed -n '/^\[20230620/p' clean.log
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
=
: 打印行号
# 输出行号
[root@prod-pve-packet-gitlab-runner-003 czx]# sed '=' clean.log
1
[20230620-082401]: less than 50%, do nathing
2
[20230620-08:26:01]: less than 50%, do nathing
3
[20230620-08:27:01]: less than 50%, do nathing
4
[20230621-03:00:01]: less than 50%, do nathing
5
[20230624-11:00:01]: less than 50%, do nathing
6
[20230701-11:00:01]: less than 50%, do nathing
7
[20230708-03:00:01]: less than 50%, do nathing
8
[20230715-03:00:01]: less than 50%, do nathing
l
: 打印文本+ASCII字符
# 打印文本+ASCII字符
[root czx]# sed -n 'l' clean.log
[20230620-082401]: less than 50%, do nathing$
[20230620-08:26:01]: less than 50%, do nathing$
[20230620-08:27:01]: less than 50%, do nathing$
[20230621-03:00:01]: less than 50%, do nathing$
[20230624-11:00:01]: less than 50%, do nathing$
[20230701-11:00:01]: less than 50%, do nathing$
[20230708-03:00:01]: less than 50%, do nathing$
[20230715-03:00:01]: less than 50%, do nathing$
s
: 替换指定字符(替换),写法为s/需要替换的字符串/替换后的字符串/替换标记
,当然,这只是在模式空间中处理,不会改变源文件,改变源文件可以加上-i
替换标记:
- g:表示要替换所有匹配的行。
- w:将替换后的结果保存到文档。
- n:1-512,表示指定要替换的字符串出现第几次时才进行替换。
- w file:将缓冲区中的内容写到指定的file文件中。
- &:用正则表达式匹配的内容进行替换。
- \n:匹配第n个子串,该子串之前在pattern中用\(\)指定。
- \:转义。
# 替换所有的less为more
[root@prod-pve-packet-gitlab-runner-003 czx]# sed 's/less/more/g' clean.log
[20230620-082401]: more than 50%, do nathing
[20230620-08:26:01]: more than 50%, do nathing
[20230620-08:27:01]: more than 50%, do nathing
[20230621-03:00:01]: more than 50%, do nathing
[20230624-11:00:01]: more than 50%, do nathing
[20230701-11:00:01]: more than 50%, do nathing
[20230708-03:00:01]: more than 50%, do nathing
[20230715-03:00:01]: more than 50%, do nathing
# 替换第一次出现的less为more
[root@prod-pve-packet-gitlab-runner-003 czx]# sed 's/less/more/1' clean.log
[20230620-082401]: more than 50%, do nathing
[20230620-08:26:01]: more than 50%, do nathing
[20230620-08:27:01]: more than 50%, do nathing
[20230621-03:00:01]: more than 50%, do nathing
[20230624-11:00:01]: more than 50%, do nathing
[20230701-11:00:01]: more than 50%, do nathing
[20230708-03:00:01]: more than 50%, do nathing
[20230715-03:00:01]: more than 50%, do nathing
d
:删除指定的行(删除)。
a
:在指定的行上一行增加一行指定内容(增加)。
i
:在指定的上一行插入一行指定内容(插入)。
c
:将选定行内容替换为指定内容(替换)。
y
:字符转换,转换之后的字符长度必须相同。
命令选项
-h或--help
:显示帮助。
-e或--expression
:表示用指定命令来处理输入的文本文件,只有一个操作命令时可以省略,一般在执行多个操作命令使用。
-f或--file
:表示用指定脚本文件来处理输入的文本文件。
-n或s --quiet
:禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i
:直接修改文本文件。
-r,-E
:使用扩展正则表达式
-s
:将多个文件视为独立文件,而不是单个连续的长文件流。