3.2 KiB
3.2 KiB
#领域/Linux
#复盘/2
一句话描述
[sed 使用说明]
核心规范
空想不如行动,积累胜于苛求。 实践 > 沉淀 > 完美主义
实践不是盲目行动,而是带着“小目标、可验证“的方向试错,实践后必须沉淀(比如记录问题、总结规律),否则就是低水平重复。
实践大于沉淀,沉淀大于完美;完美是沉淀的终局方向,沉淀是实践的复盘产物;分域施策,避坑落地,始于行动,终于迭代。
三省沉淀法
- 达成了[命令行查找替换文件内容______]目标
- 遇到了[正则总是难以理解____]问题
- 下次改进[提供正则模板、了解正则语法____]
个人理解
[命令行的查找、替换功能__]
实践计划
- [编写匹配模板____]
- [了解正则使用______]
- [________]
核心定义
sed = Stream Editor(流编辑器),是面向「文本流」的非交互式文本编辑工具。
核心工作原理:逐行编辑,循环执行,不提取/计算
- 读取一行内容
- 内容复制到 sed 模式空间(内存临时缓冲区,即不操作源文件)
- 执行 sed 编辑命令(替换、删除、插入等),只修改模式空间里的内容
- 模式空间输出处理后的内容到屏幕,读取下一行,重复1-4
黄金规则
- sed 默认不修改源文件,只修改内存副本,结果输出到屏幕
- sed 默认输出所有行,不管有没有编辑过,相当于所有内容
基本语法:sed 's/hello/world/g'
# 格式:前置命令 | sed 'sed的编辑命令'
cat test.txt | sed 's/hello/world/'
ps -ef | sed '/java/d'
find . -name "*.sh" | xargs sed 's/\/bin\/sh/\/bin\/bash/'
sed 's/80/8080/' nginx.conf
sed '/^$/d' app.log
# 直接修改源文件
sed -i.bak 's/old/new/' test.txt
sed -n '/java/p' ps.txt
sed -e '/^$/d' -e 's/80/8080/' -e '/DEBUG/d' app.log
| 选项 | 说明 |
|---|---|
| -i | 原地修改文件 |
| -i.bak | 修改源文件 + 自动备份 |
| -n | 静默输出被匹配的行 |
| -e | 多个命令按顺序执行 |
核心编辑命令
行号匹配:2(第2行)、1,5(1到5行)、$(最后一行) 正则匹配:/关键词/、/^$/(匹配空行)、/^#/(匹配以#开头的注释行)
# s 字符串替换
sed 's/旧字符串/新字符串/修饰符' 文件名
# \1 为捕获组,即第一个正则()内容
sed -i.bak 's/\([0-9]\+\)号点位:/# \1号点位\n\1:/g' test.txt
# d 删除指定行
# -i 是才会修改源文件
sed '2d' test.txt
sed '/^$/d' test # 删除空行
sed '/^#/d' test.txt # 删除注释行
# p 打印指定行
# 必须搭配 -n 使用
sed -n '3p' test.txt
# 第 5 行下追加内容
sed '5a 内容'
# 第 5 行上插入内容
sed '5i 内容'
- s:声明是替换操作
- /:分隔符
- 修饰符:
- g:全局替换,默认只匹配每行第一个,加g会匹配一行中所有
- i:忽略大小写
- p:打印匹配到的行,必须搭配 -n 使用
- 自定义分隔符:@、#、|
- a:下一行追加
- i:上一行插入
- c:替换整行