136 lines
3.2 KiB
Markdown
136 lines
3.2 KiB
Markdown
|
||
---
|
||
#领域/Linux
|
||
|
||
#复盘/2
|
||
|
||
## 一句话描述
|
||
|
||
[____sed 使用说明____]
|
||
|
||
---
|
||
|
||
## 核心规范
|
||
|
||
>空想不如行动,积累胜于苛求。
|
||
>实践 > 沉淀 > 完美主义
|
||
|
||
实践不是盲目行动,而是带着“小目标、可验证“的方向试错,实践后必须沉淀(比如记录问题、总结规律),否则就是低水平重复。
|
||
|
||
实践大于沉淀,沉淀大于完美;完美是沉淀的终局方向,沉淀是实践的复盘产物;分域施策,避坑落地,始于行动,终于迭代。
|
||
|
||
---
|
||
|
||
## 三省沉淀法
|
||
|
||
- 达成了[_命令行查找替换文件内容_______]目标
|
||
- 遇到了[__正则总是难以理解______]问题
|
||
- 下次改进[__提供正则模板、了解正则语法______]
|
||
|
||
## 个人理解
|
||
|
||
[___命令行的查找、替换功能_____]
|
||
|
||
## 实践计划
|
||
|
||
1. [__编写匹配模板______]
|
||
2. [_了解正则使用_______]
|
||
3. [________]
|
||
|
||
## 核心定义
|
||
|
||
sed = **`Stream Editor`**(流编辑器),是**面向「文本流」的非交互式文本编辑工具**。
|
||
|
||
核心工作原理:逐行编辑,循环执行,不提取/计算
|
||
|
||
1. 读取一行内容
|
||
2. 内容复制到 sed 模式空间(内存临时缓冲区,即不操作源文件)
|
||
3. 执行 sed 编辑命令(替换、删除、插入等),只修改模式空间里的内容
|
||
4. 模式空间输出处理后的内容到屏幕,读取下一行,重复1-4
|
||
|
||
|
||
### 黄金规则
|
||
|
||
1. sed 默认不修改源文件,只修改内存副本,结果输出到屏幕
|
||
2. sed 默认输出所有行,不管有没有编辑过,相当于所有内容
|
||
|
||
|
||
### 基本语法:sed 's/hello/world/g'
|
||
|
||
```bash
|
||
|
||
# 格式:前置命令 | 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
|
||
|
||
```
|
||
|
||
```bash
|
||
# 直接修改源文件
|
||
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行)、$(最后一行)
|
||
正则匹配:/关键词/、/^$/(匹配空行)、/^#/(匹配以#开头的注释行)
|
||
|
||
```bash
|
||
|
||
# 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:替换整行
|
||
|