Linux 文本编辑三剑客之 sed
Linux 文本处理三剑客是面试和后端工作中较为常见的。需要掌握:
- grep:文本过滤、筛选
- sed:文本编辑加工
- awk:文本格式化输出

本节内容基于正则表达式:
正则表达式
借助正则表达式可以快速匹配、过滤需要的字符串,在 Linux 上处理大量文本比较高效。
- 一次处理一行
- Linux 上只有文本处理工具三剑客(grep、sed、awk)常用,编程语言都有对应支持
- 扩展正则是基本正则的补充,一般结合三剑客使用建议直接使用扩展正则的写法,简洁
基本正则
| 符号 | 作用 |
|---|---|
^ |
模式匹配最左侧,^abc就是以abc开头 |
$ |
模式匹配最右侧,abc$就是以abc结尾 |
^$ |
组合符。空行 |
. |
任意一个且只有一个字符,不匹配空行 |
* |
匹配前一个字符0或多次,不单独使用 |
.* |
组合符。匹配任意多个字符 |
^.* |
组合符。匹配任意多个字符开头 |
.*$ |
组合符。匹配任意多个字符结尾 |
\ |
特殊字符还原本意,\.是小数点 |
[abc] |
匹配集合内任意字符 |
[^abc] |
匹配集合之外的字符 |
<> |
定位单词的左侧和右侧。<deltaqin> 可以找出 deltaqin nb找不出deltaqinnb |
扩展正则
| 符号 | 作用 |
|---|---|
+ |
匹配前面字符一次或多次 |
[:@]+ |
组合符。匹配[]内的字符一次或多次 |
? |
匹配前面字符0次或1次 |
| ` | ` |
() |
分组过滤,括号内是一个整体 |
a{m,n} |
前面的字符最少m最多n次 |
a{m,} |
前面的字符最少m次 |
a{m} |
前面的字符m次 |
a{,m} |
前面的字符最多m次 |
具体使用还是要结合三剑客一起
Why sed
逐行文本过滤、编辑工具。利用正则表达式快速实现增删改查。
What sed
sed [选项] [模式匹配][sed内置命令字符] [输入文件]

- option:选项
-i将结果写到文件,否则是内存数据-n只输出匹配模式的内容-e一个命令多次编辑,替代管道符-r正则扩展表达式
- pattern:模式匹配
不写:全文n:第n行/pattern/:匹配模式的每一行n,m或者/pattern/,/pattern/或者n,+5:范围区间,n到m行,或者pattern之间的行,以及第n行向下5行n~m第n行开始,步长为m的行
- 内置命令字符
a:指定行的下一行,追加一行或者多行文本d:删除匹配行i:指定行的上一行,插入一行或者多行文本p:打印匹配行内容,和-n选项一起用s/正则/替换后内容/g或者s#正则#替换后内容#g:匹配正则内容之后替换
How sed--基本正则
按照行号输出行内容

-n 只显示匹配模式的行:

显示2,2+1,2+2,2+3行:

显示 2 行到结尾

按照正则匹配输出行内容

删除正则匹配输出行内容

上面只在内存生效,要在文件生效使用-i:

替换文件内容
所有的 java 替换为 go

多次编辑


匹配行下方追加内容
在指定行追加一行

在指定行追加多行,使用换行符 \n

在每一行插入新内容

匹配行上方插入内容

常见使用案例
取出 Linux IP

注意模式匹配中都要指定 2

替换前3行java为go,只替换一次与替换所有,打印到控制台


替换前3行java为go,替换所有,应用到文件


删除第三行

空格、空行开头的添加注释

文件前三行添加
-r 是正则扩展


找出系统版本


