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:将多个文件视为独立文件,而不是单个连续的长文件流。