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 是正则扩展