文本三剑客:都是按行读取后处理。
- grep 过滤行内容。
- awk 过滤字段。
- sed 过滤行内容;修改行内容。
sed编辑器
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed的工作流程
sed的工作流程主要包括读取、执行和显示三个过程:
- 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。
- 执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
- 显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非使用"sed -i"修改源文件、或使用重定向输出到新的文件中。
sed命令格式
sed -e '操作' 文件1 文件2
sed -n -e '操作' 文件1 文件2
sed -f 脚本文件 文件1 文件2
sed -i -e '操作' 文件1 文件2
执行多条命令的三种方法
sed -n -e '操作1' -e '操作2' 文件
sed -n -e '操作1;操作2' 文件
sed -e 'n{
操作1
操作2
......
}' 文件1
常用选项:
| 选项 | 作用 |
|---|---|
| -e 或--expression= | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 |
| -f 或--file= | 表示用指定的脚本文件来处理输入的文本文件 |
| -h 或--help | 显示帮助 |
| -n、--quiet或--silent | 禁止sed编辑器输出,但可以与p命令一起使用完成输出 |
| -i | 直接修改目标文本文件 |
常用操作:
| 操作 | 作用 |
|---|---|
| s | 替换,替换指定字符 |
| d | 删除,删除选定的行 |
| a | 增加,在当前行下方增加一行指定内容 |
| i | 插入,在选定行上方插入一行指定内容 |
| c | 替换,将选定行替换为指定内容 |
| y | 字符转换,转换前后的字符长度必须相同 |
| p | 打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用 |
| = | 打印行号 |
| l (小写L) | 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
sed的核心功能:增删改查(可配合正则表达式)
查: p
删: d
改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)
增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)
复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)
sed 查找打印p
4.1 不指定行(顺序处理每一行)
1、sed编辑器默认输出行内容,-n选项可以禁止输出。如果不加-n,却使用p操作,那么每行内容会打印两次。
sed -e "p" :每行内容打印两次。
sed -n "p" :每行内容只打印一次。
[root@yuji ~]# cat ff.txt //查看文件内容,共10行
one
two
three
four
five
&

最低0.47元/天 解锁文章
2277





