--- #领域/Linux #复盘/0 ## 一句话描述 [____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:替换整行