sed命令笔记250419
sed命令笔记250419
sed(Stream Editor)是 Linux/Unix 系统中强大的流编辑器,主要用于对文本进行过滤和转换(按行处理)。它支持正则表达式,适合处理文本替换、删除、插入等操作。以下是 sed 的详细解析:
一、基本语法
sed [选项] '命令' 输入文件
sed [选项] -f 脚本文件 输入文件  # 从脚本文件读取命令
二、常见选项
| 选项 | 说明 | 
|---|---|
| -n | 静默模式,仅输出处理后的行(常与 p命令搭配) | 
| -e | 指定多个命令,如 sed -e '命令1' -e '命令2' | 
| -i | 直接修改文件内容(慎用,建议先备份) -i.bak修改前备份原文件为.bak | 
| -E,-r,--regexp-extended | 使用扩展正则表达式(如 +,|,()等) | 
| -f | 从指定文件中读取命令 | 
三、编辑命令(核心)
1. 替换命令 s
 
s/pattern/replacement/flags
- flags 常用值: - g:全局替换(默认每行仅替换第一个匹配)
- p:替换后打印行(需与- -n选项配合)
- i:忽略大小写
- 数字:替换第 N 个匹配
 
- 示例:echo "hello world" | sed 's/hello/hi/' # 输出 hi world echo "a a a" | sed 's/a/b/2' # 替换第二个a:a b a
2. 删除命令 d
 
sed '地址定界d' 文件  # 删除匹配行
sed '3d' file      # 删除第3行
sed '/^$/d' file   # 删除所有空行
3. 插入/追加行
| 命令 | 说明 | 
|---|---|
| i\ | 在行前插入内容(如 sed '2i\插入内容' file) | 
| a\ | 在行后追加内容(如 sed '2a\追加内容' file) | 
4. 其他命令
| 命令 | 说明 | 
|---|---|
| p | 打印行(常与 -n配合:sed -n '1p' file打印第1行) | 
| = | 显示行号(如 sed '=' file) | 
| y | 字符转换(如 sed 'y/abc/ABC/'将a→A, b→B, c→C) | 
| r | 读取文件并插入(如 sed '/pattern/r otherfile' file) | 
| w | 将匹配行写入文件(如 sed '/pattern/w output.txt' file) | 
四、地址定界(指定操作范围)
| 格式 | 说明 | 
|---|---|
| n | 第 n 行(如 sed '3s/a/b/'修改第3行) | 
| n,m | 第 n 到 m 行(如 1,5d删除1-5行) | 
| $ | 最后一行 | 
| /pattern/ | 匹配正则的行(如 /^#/d删除注释行) | 
| n,+m | 从第n行到其后m行(如 2,+3表示2-5行) | 
| ! | 取反(如 3!d删除除第3行外的所有行) | 
五、替换命令 s 的进阶用法
 
1. 分组与反向引用
sed 命令中的分组(Grouping)是正则表达式的重要功能,通过 () 将部分模式标记为一个整体,并可通过反向引用在替换操作中重用这些分组内容。
echo "123-456" | sed -r 's/([0-9]+)-([0-9]+)/\2-\1/'  # 输出 456-123
- ()分组,- \1,- \2引用分组。 从- \1开始, 第一个是- \1
- ⚠️ sed不支持(?:)语法,所有()均为捕获分组。
 用sed替换文本 笔记250419 
  sed的分组替换,捕获组,反向引用 笔记250419 
2. 特殊字符转义
若替换内容包含 /,可更换分隔符(如 s|/old|/new|)。
3. 动态替换
使用 & 引用匹配的整个内容:
echo "123" | sed 's/[0-9]\+/数字:&/'  # 输出 数字:123
分组详解
sed的分组替换,捕获组,反向引用 笔记250419
sed 命令中的分组(Grouping)是正则表达式的重要功能,通过 () 将部分模式标记为一个整体,并可通过反向引用在替换操作中重用这些分组内容。
⚠️ sed 不支持 (?:) 语法,所有 () 均为捕获分组。
一、分组的基本语法
1. 创建分组
使用 \( 和 \) 包裹正则表达式(基础正则语法):
echo "abc123" | sed 's/\([a-z]\+\)[0-9]\+/\1/'  # 输出 abc
# 解析:
# - \([a-z]\+\) 匹配字母部分,并标记为分组1
# - \1 反向引用分组1的内容
2. 扩展正则表达式
若使用 -r(GNU sed)或 -E(macOS),可省略转义符:
echo "abc123" | sed -r 's/([a-z]+)[0-9]+/\1/'  # 输出 abc(更简洁)
二、分组的核心用途
1. 提取并重组内容
# 将日期格式从 "YYYY-MM-DD" 改为 "DD/MM/YYYY"
echo "2023-10-05" | sed -r 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
# 输出:05/10/2023
# 分组1: 2023, 分组2: 10, 分组3: 05
2. 保留部分原始内容
# 在匹配的单词两侧添加方括号
echo "hello world" | sed -r 's/(\b\w+\b)/[\1]/g'
# 输出:[hello] [world]
3. 动态调整顺序
# 交换 "key: value" 为 "value: key"
echo "name: John" | sed -r 's/([^:]+):\s*(.+)/\2: \1/'
# 输出:John: name
三、高级分组技巧
1. 多级分组(嵌套分组)
分组按左括号顺序编号,从外到内、从左到右:
echo "12-34-56" | sed -r 's/(([0-9]{2})-){2}([0-9]{2})/\1\3/'
# 输出:12-3456
# 分组1: 12-34-, 分组2: 34, 分组3: 56
 用sed替换文本 笔记250419 
  sed的分组替换,捕获组,反向引用 笔记250419 
2. 与替换标志结合
结合 g(全局)或 i(忽略大小写)等标志:
# 将所有重复的单词合并(如 "hello hello" → "hello")
echo "hello hello world" | sed -r 's/\b(\w+)\b \1/\1/g'
# 输出:hello world
3. 非捕获分组(sed不支持)
⚠️ sed 不支持 (?:) 非捕获分组语法,所有 () 均为捕获分组。
四、分组在地址定界中的应用
分组也可用于匹配行的条件判断:
# 删除包含重复单词的行(如 "apple apple")
sed -r '/\b(\w+)\b \1/d' file.txt
六. 示例场景
1. 替换文件内容
sed -i 's/foo/bar/g' file.txt        # 将所有foo替换为bar(直接修改文件)
sed -i.bak 's/old/new/' file.txt     # 修改前备份原文件为file.txt.bak
2. 删除操作
sed '/^#/d' file.conf                # 删除所有注释行(以#开头)
sed '/^$/d; /^$/d' file              # 删除连续空行(保留单个空行需更复杂处理)
3. 处理指定行
sed '2,5s/yes/no/' file             # 将2-5行的yes替换为no
sed '$a\This is the end' file        # 在最后一行后追加内容
4. 多重命令
sed -e 's/foo/bar/' -e '/baz/d' file
sed 's/a/A/; s/b/B/' file           # 多个命令用分号分隔
1. 处理日志文件
# 提取日志中的 IP 和访问路径(假设格式:IP - [时间] "GET /path HTTP/1.1")
cat access.log | sed -r 's/([0-9.]+).*"GET (\/[^ ]+).*/\1 \2/'
# 输出:192.168.1.1 /index.html
2. 格式化配置文件
# 将 "key=value" 改为 "key = value"
sed -r 's/([^=]+)=/\1 = /' config.ini
3. 处理 CSV 数据
# 交换 CSV 前两列(假设分隔符为逗号)
echo "apple,123,fruit" | sed -r 's/([^,]+),([^,]+)/\2,\1/'
# 输出:123,apple,fruit
七、注意事项
-  -i选项风险:直接修改原文件,建议先不加-i测试命令。
-  正则兼容性:默认支持基础正则,使用 -r或-E启用扩展正则。
-  行处理机制: sed逐行处理,适合大文件,但复杂操作可能不如awk灵活。
-  转义括号:在基础正则中需用 \(和\),扩展正则(-r或-E)可直接用()。
-  分组数量:最多支持 9 个分组( \1到\9)。
-  性能:复杂分组可能降低处理速度,尤其在大型文件中。 
 用sed替换文本 笔记250419 
  sed的分组替换,捕获组,反向引用 笔记250419 
1️⃣ 参考 1
sed(Stream Editor)是 Linux/Unix 中强大的流式文本处理工具,主要用于对文本进行替换、删除、插入等操作。以下是 sed 的详细用法:
基本语法
sed [选项] '命令' 输入文件
sed [选项] -f 脚本文件 输入文件
常用选项
| 选项 | 作用 | 
|---|---|
| -n | 仅输出处理后的行(默认会输出所有行) | 
| -i | 直接修改文件内容(谨慎使用,建议先备份) | 
| -e | 指定多个命令(例如 sed -e '命令1' -e '命令2') | 
| -f | 从脚本文件读取命令 | 
| -E,-r,--regexp-extended | 使用扩展正则表达式(简化语法) | 
常用命令
1. 替换文本:s
 
sed 's/原内容/替换内容/[标志]'
- 标志: - g:全局替换(默认只替换每行第一个匹配项)
- p:打印替换后的行(常与- -n选项一起使用)
- i:忽略大小写(需配合- -r或- -E使用扩展正则)
 
示例:
sed 's/apple/orange/g' file.txt       # 替换所有 apple 为 orange
sed -n 's/foo/bar/p' file.txt         # 仅打印发生替换的行
sed -i 's/old/new/' file.txt          # 直接修改文件
sed 's|/usr/bin|/usr/local/bin|g'     # 使用 | 替代 / 作为分隔符
2. 删除行:d
 
sed '地址定界符 d' 文件
示例:
sed '3d' file.txt           # 删除第3行
sed '/pattern/d' file.txt   # 删除匹配 pattern 的行
sed '1,5d' file.txt         # 删除1-5行
sed '/^$/d' file.txt        # 删除所有空行
3. 插入/追加行:i 和 a
 
- i:在指定行前插入
- a:在指定行后追加
示例:
sed '2i Insert this line' file.txt    # 在第2行前插入一行
sed '/pattern/a Append this line'     # 在匹配行后追加一行
4. 替换指定行号
sed '2s/old/new/' file.txt       # 替换第2行的第一个 old 为 new
sed '1,5s/old/new/g' file.txt    # 替换1-5行的所有 old 为 new
5. 地址定界(指定操作范围)
- 行号:sed '3,5命令'(操作第3-5行)
- 正则匹配:sed '/pattern/命令'(操作匹配pattern的行)
示例:
sed '/start/,/end/d' file.txt    # 删除从 start 到 end 的所有行
sed '/^#/d' file.txt             # 删除所有注释行(以 # 开头)
高级用法
1. 多命令执行
sed -e 's/foo/bar/' -e '/pattern/d' file.txt
# 或
sed 's/foo/bar/; /pattern/d' file.txt
2. 保持空间(Hold Space)
- h:将模式空间内容复制到保持空间
- H:将模式空间内容追加到保持空间
- g:将保持空间内容复制到模式空间
- G:将保持空间内容追加到模式空间
示例(反转文件行序):
sed -n '1!G;h;$p' file.txt
3. 文件操作
sed 'r 文件2' 文件1        # 将文件2的内容插入到文件1的每行后
sed '/pattern/w 新文件' file.txt  # 将匹配的行写入新文件
4. 转换字符:y
 
sed 'y/abc/XYZ/' file.txt   # 将 a→X, b→Y, c→Z(类似 tr 命令)
常见使用场景
-  批量替换文件内容: sed -i 's/old/new/g' *.txt
-  删除空行或注释行: sed -i '/^$/d; /^#/d' file.conf
-  提取特定内容: sed -n '/error/p' log.txt > errors.log
-  行号处理: sed = file.txt | sed 'N; s/\n/ /' # 显示行号(类似 nl)
-  批量修改配置: sed -i '/^Port /s/22/2222/' /etc/ssh/sshd_config # 修改SSH端口
注意事项
- -i选项会直接修改文件,建议先不加- -i测试命令。
- 正则表达式中的特殊字符(如 *,$,^)需要转义。
- macOS 的 sed与 Linux 存在差异(如-i必须带参数:sed -i '' ...)。
通过灵活组合上述命令,可以高效处理文本任务!
2️⃣ 参考 2
sed命令详解
一、sed是什么?
sed(Stream Editor) 是 Linux 和类 Unix 系统中的流式文本编辑器,用于对文本进行高效处理和转换。它逐行读取文件,通过命令对文本进行增删改查操作,支持正则表达式,适合处理大量文本数据。
二、核心语法结构
sed [选项] '命令' 输入文件
- 常用选项: - -n:安静模式(不自动打印所有行,需配合- p命令显式输出)。
- -i:直接修改文件内容(慎用,建议先不加- -i测试)。
- -e:执行多个命令(如- sed -e 's/a/b/' -e 's/c/d/' file)。
- -f:从脚本文件读取命令(- sed -f script.sed file)。
 
三、基础命令与示例
1. 打印文本
- 打印第2行:sed -n '2p' file.txt
- 打印第1-3行:sed -n '1,3p' file.txt
- 打印包含"error"的行:sed -n '/error/p' file.txt
2. 替换文本
- 替换每行第一个匹配项:sed 's/old/new/' file.txt
- 全局替换(所有匹配项):sed 's/old/new/g' file.txt
- 替换第3行的内容:sed '3s/old/new/' file.txt
3. 删除文本
- 删除第3行:sed '3d' file.txt
- 删除空行:sed '/^$/d' file.txt
- 删除包含"error"的行:sed '/error/d' file.txt
4. 插入/追加文本
- 在第2行前插入文本:sed '2i\Insert this line' file.txt
- 在第2行后追加文本:sed '2a\Append this line' file.txt
四、高级功能
1. 多行处理命令
- 合并下一行到模式空间:sed 'N' file.txt # 合并两行(如处理跨行日志)
- 删除多行组中的单行:sed 'D' file.txt # 删除模式空间的第一行
- 打印多行组中的单行:sed -n 'P' file.txt # 打印模式空间的第一行
2. 模式空间与保持空间
- 复制模式空间到保持空间:sed 'h' file.txt # h命令
- 将保持空间内容覆盖模式空间:sed 'g' file.txt # g命令
- 示例:交换两行内容:echo -e "line1\nline2\nline3" | sed -n '1h;2x;p' # 输出:line2(原第1行和第2行交换)
3. 分支与循环
- 条件分支:sed '/pattern/b label' file.txt # 匹配pattern则跳转到label
- 循环替换:echo "This, is, a, test" | sed -n ':start; s/,//1p; t start' # 输出:This is a test(逐步删除逗号)
4. 正则表达式增强
- 子字符串匹配:echo "System Administrator" | sed 's/\(System\) Administrator/\1 User/' # 输出:System User(\1引用第一个括号内容)
- 扩展正则表达式(使用-r或-E):sed -r 's/(http|https)://\1/g' file.txt # 提取URL协议
五、实用技巧
- 批量修改文件:sed -i 's/旧域名/新域名/g' *.html # 修改所有HTML文件中的域名
- 提取特定行:sed -n '10,20p' data.log # 输出第10-20行
- 删除空行和注释:sed -r '/^$|^#/d' config.conf # 删除空行和以#开头的行
- 复杂替换:sed 's/old/new/2' file.txt # 仅替换每行第二个匹配项
六、总结
- 适用场景:日志处理、配置文件修改、批量文本替换、数据分析预处理。
- 注意事项: - 使用-i前务必备份文件。
- 正则表达式中的特殊字符(如/、*)需转义。
- 多命令执行时,用分号或-e分隔命令。
 
- 使用
掌握sed可显著提升文本处理效率,建议通过实际案例练习巩固。
3️⃣ 参考 3
以下是关于 sed 命令的详细解析,涵盖其基本用法、核心命令、选项、高级功能及实际示例:
1. 什么是 sed?
 
- 全称:Stream Editor(流编辑器)。
- 功能:对文本流进行编辑,支持正则表达式,常用于文本处理、替换、删除、插入等操作。
- 特点: - 非交互式处理,适合脚本自动化。
- 处理时将文本暂存到“模式空间”(Pattern Space)中,处理后再输出。
 
2. 基本语法
sed [选项] '命令' 文件
sed [选项] -f 脚本文件 文件
- 常用选项: - -n:抑制默认输出(仅打印处理后的行)。
- -i:直接修改原文件(可加后缀备份,如- -i.bak)。
- -f 脚本文件:从文件中读取- sed命令。
- -e:在命令行中执行多个命令。
 
3. 核心命令
(1) 替换(s 命令)
 
- 语法:s/旧字符串/新字符串/标志
- 标志: - g:全局替换(替换所有匹配项,默认仅替换第一个)。
- p:替换后打印该行。
- w 文件:将替换后的行写入指定文件。
 
- 示例:# 替换文件中所有出现的 "apple" 为 "banana" sed 's/apple/banana/g' file.txt# 直接修改文件并备份 sed -i.bak 's/apple/banana/g' file.txt# 替换每行最后一个匹配项 sed 's/apple/banana/\;' file.txt # 注意:此处 `\;` 表示最后一个匹配项
(2) 删除(d 命令)
 
- 语法:地址 d
- 示例:# 删除第3行 sed '3d' file.txt# 删除包含 "error" 的行 sed '/error/d' file.txt# 删除第5到第10行 sed '5,10d' file.txt
(3) 打印(p 命令)
 
- 语法:地址 p
- 示例:# 打印第5行(需配合 `-n`) sed -n '5p' file.txt# 打印包含 "warning" 的行 sed -n '/warning/p' file.txt
(4) 插入与追加
- 插入(i):在指定行前插入文本。
- 追加(a):在指定行后追加文本。
- 示例:# 在第3行前插入 "New Line" sed '3i\New Line' file.txt# 在匹配 "start" 的行后追加 "Added Text" sed '/start/a\Added Text' file.txt
(5) 行号与模式匹配
- 行号地址:直接指定行号(如 3表示第3行)。
- 正则表达式:用 /pattern/匹配行。
- 组合地址:start,end或/pattern1/,/pattern2/。
- 示例:# 删除第2到第5行 sed '2,5d' file.txt# 从 "START" 到 "END" 的行全部删除 sed '/START/,/END/d' file.txt
4. 高级功能
(1) 分支与标签(b、t、:label)
 
- 用途:实现条件跳转或循环。
- 示例:# 标签跳转示例 sed -e ':loop' -e '/pattern/!b end' -e 's/pattern/replacement/' -e 'b loop' -e ':end' file.txt
(2) 缓冲区操作(h、H、g、G)
 
- 用途:暂存和恢复文本。
- 命令: - h:将模式空间内容存入缓冲区。
- H:追加模式空间内容到缓冲区。
- g:用缓冲区内容替换模式空间。
- G:追加缓冲区内容到模式空间。
 
- 示例:# 将当前行与下一行合并 sed -e 'N; s/\n/ /' file.txt
(3) 扩展正则表达式
- 支持:sed支持正则表达式匹配,如^(行首)、$(行尾)、.*(任意字符)等。
- 示例:# 删除以 "#" 开头的行 sed '/^#/d' file.txt# 替换行尾的数字 sed 's/[0-9]$//g' file.txt
5. 实际应用示例
示例1:替换字符串并修改文件
# 将文件中的 "old" 替换为 "new",并备份原文件
sed -i.bak 's/old/new/g' config.txt
示例2:删除特定行
# 删除包含 "error" 的行,并输出结果到新文件
sed '/error/d' log.txt > cleaned_log.txt
示例3:插入文本
# 在文件开头插入 "Header Line"
sed '1i\Header Line' file.txt
示例4:结合正则表达式
# 将所有以数字开头的行替换为空行
sed '/^[0-9]/s/.*/ /' data.txt
示例5:多命令组合
# 删除第5行,替换第10行的 "text" 为 "new"
sed '5d;10s/text/new/' example.txt
6. 注意事项
- 默认行为:sed默认输出所有行,修改仅在内存中临时生效,需用-i保存。
- 特殊字符转义:若替换内容包含 /、&等,需转义或更换分隔符(如s|old|new|)。
- 多行处理:用 N命令将下一行加入模式空间,实现多行操作。
7. 总结
sed 是 Linux 下强大的文本处理工具,适用于:
- 快速替换、删除、插入文本。
- 结合正则表达式进行复杂匹配。
- 脚本自动化文本处理任务(如日志清理、配置文件修改)。
通过灵活组合命令和选项,可以高效完成各种文本编辑需求。
4️⃣ 参考 4
sed 命令详解
sed(Stream Editor,流编辑器)是 Unix/Linux 下强大的文本处理工具,用于对文本流(文件或标准输入)进行过滤和转换。它逐行读取输入,根据指定的脚本对每行数据进行处理,最终输出处理结果。
一、基本语法
sed [选项] '脚本命令' 输入文件
或
sed [选项] -f 脚本文件 输入文件
二、常用选项
| 选项 | 说明 | 
|---|---|
| -n | 取消默认输出(仅输出被脚本处理的行)。 | 
| -e | 执行指定的脚本命令(可省略,直接跟单引号脚本)。 | 
| -f file | 从文件中读取脚本命令。 | 
| -i | 直接修改输入文件(危险!建议先备份,可通过 -i.bak生成备份)。 | 
| -r | 使用扩展正则表达式(默认使用基本正则表达式)。 | 
| -s | 分隔多个文件时,视为独立文件处理(不合并成一个流)。 | 
| -v | 显示版本信息。 | 
三、核心工作流程
- sed从输入中读取一行数据,存入模式空间(Pattern Space)。
- 对模式空间中的内容应用脚本中的所有命令。
- 处理完成后,默认将模式空间的内容输出到标准输出(可通过 -n禁用)。
- 清空模式空间,读取下一行,重复上述过程。
四、常用命令(按功能分类)
1. 替换命令 s
 
语法:
s/旧字符串/新字符串/[修饰符]
- 修饰符: - g:全局替换(替换行中所有匹配项,而非第一个)。
- 数字:替换第- n个匹配项(如- s/old/new/2替换第二个匹配项)。
- i:不区分大小写(仅在扩展正则中有效,或配合- -r使用)。
 
示例:
- 替换每行第一个 apple为banana:sed 's/apple/banana/' file.txt
- 全局替换所有 apple为banana:sed 's/apple/banana/g' file.txt
- 替换以 http://开头的字符串为https://(正则匹配):sed 's/^http:/https:/' file.txt
- 使用其他分隔符(避免转义斜杠):sed 's#http://#https://#' file.txt # 用 # 代替 / 作为分隔符
2. 删除命令 d
 
语法:
地址范围d  # 省略地址则匹配所有行
示例:
- 删除包含 error的行:sed '/error/d' file.txt
- 删除第 5 行:sed '5d' file.txt
- 删除空行:sed '/^$/d' file.txt # 或 sed -e '/^\s*$/d' 处理包含空格的空行
3. 插入与附加命令 i、a
 
- i(插入):在匹配行的上方插入新行。
- a(附加):在匹配行的下方插入新行。
语法:
地址范围i\  
新行内容  
地址范围a\  
新行内容  
示例:
- 在包含 header的行上方插入# Start:sed '/header/i\# Start' file.txt
- 在文件末尾添加一行 EOF:sed '$a\EOF' file.txt # $ 表示最后一行
4. 修改命令 c
 
语法:
地址范围c\  
新内容  
功能:将匹配行替换为指定的新内容。
 示例:
- 将第 3 行替换为 new line:sed '3c\new line' file.txt
5. 打印命令 p
 
语法:
地址范围p
功能:打印匹配行(需配合 -n 选项避免默认输出)。
 示例:
- 仅打印包含 success的行:sed -n '/success/p' file.txt
- 打印第 2 到第 5 行:sed -n '2,5p' file.txt
6. 保留空间命令 h、H、g、G
 
- h:将模式空间内容复制到保留空间(覆盖保留空间)。
- H:将模式空间内容追加到保留空间。
- g:将保留空间内容复制到模式空间(覆盖模式空间)。
- G:将保留空间内容追加到模式空间。
示例:交换两行内容(需配合地址范围):
sed -n '1h; 2G; p' file.txt  # 第1行存入保留空间,第2行追加保留空间内容并打印
7. 其他实用命令
- =: 打印行号。- sed '=' file.txt # 输出每行内容及其行号(行号先于内容)
- q: 退出sed(遇到匹配行时终止处理)。- sed '/target/q' file.txt # 遇到包含target的行时停止处理
- s///简写:替换为空(删除匹配内容)。- sed 's/old//' file.txt # 删除第一个old sed 's/old//g' file.txt # 删除所有old
五、地址范围
sed 命令可针对特定行或匹配模式的行执行,地址范围语法如下:
| 语法 | 说明 | 
|---|---|
| n | 第 n行(如5表示第5行)。 | 
| n,m | 第 n行到第m行(如2,10)。 | 
| /pattern/ | 匹配包含 pattern的行(如/error/)。 | 
| /pattern1/,/pattern2/ | 从匹配 pattern1的行到匹配pattern2的行(包含这两行)。 | 
| $ | 最后一行。 | 
| 0 | 不匹配任何行(无意义)。 | 
示例:
- 对第 3 到第 5 行执行删除:sed '3,5d' file.txt
- 对包含 start到包含end的行之间的内容执行替换:sed '/start/,/end/s/old/new/g' file.txt
六、正则表达式注意事项
-  基本正则 vs 扩展正则: - 默认使用基本正则表达式(BRE),特殊字符需转义(如 \.表示点号,\( \)表示分组)。
- 使用 -r选项启用扩展正则表达式(ERE),无需转义部分字符(如\.可写成\.或\.,()直接分组)。
 
- 默认使用基本正则表达式(BRE),特殊字符需转义(如 
-  常用正则符号: - ^:行首,- $:行尾。
- .*:匹配任意字符(除换行符)零次或多次。
- [abc]:匹配a、b、c中的任意一个。
- \(text\)(BRE)或- (text)(ERE):分组,可通过- \1引用第一个分组。
 
示例(分组引用):
- 交换 a=123 b=456中的值:sed 's/\(a=\)\(.*\) \(b=\)\(.*\)/\3\4 \1\2/' # 基本正则,需转义括号 sed -r 's/(a=)(.*) (b=)(.*)/\3\4 \1\2/' # 扩展正则,无需转义括号
七、典型应用场景
- 替换文件中的字符串(谨慎使用 -i):sed -i 's/old_string/new_string/g' file.txt
- 删除注释或空行:sed -e '/^#/d' -e '/^$/d' config.conf # 删除以#开头的注释行和空行
- 提取日志中的特定信息:logfile | sed -n '/ERROR/p' # 仅输出包含ERROR的行
- 修改配置文件:sed -i '/^user=/c\user=admin' config.ini # 修改user配置项
- 处理 CSV/日志格式:sed 's/,/ /g' data.csv # 将逗号替换为空格
八、注意事项
- 备份文件:使用 -i前务必确认,或通过-i.bak生成备份:sed -i.bak 's/old/new/g' file.txt # 生成file.txt.bak备份
- 特殊字符转义:在替换内容中若包含 $、/、&等字符,需用\转义,或使用其他分隔符(如#)。
- 多行处理:sed 默认逐行处理,若需处理多行,可结合 N(将下一行追加到模式空间)、D(删除模式空间中直到第一个换行符的内容)等命令,但逻辑较复杂,建议改用awk或perl。
九、总结
sed 是文本处理的瑞士军刀,核心在于灵活运用地址范围和替换/删除/插入等命令,结合正则表达式实现高效的文本转换。掌握基础命令后,通过实践可应对复杂场景(如日志清洗、配置文件修改等)。建议先通过 man sed 查阅完整文档,或使用在线工具(如 RegExr)调试正则表达式。
5️⃣ 参考 5
sed 是流编辑器(Stream Editor)的简称,是一种强大的文本处理工具,能在 Linux 系统中对文本进行各种操作,如替换、删除、插入等。以下是对它的详细讲解:
基本语法
- sed [选项]... {script}... [输入文件]...
- sed [选项]... --file=scriptfile [输入文件]...
其中,选项常见的有:
- -e script:表示使用脚本- script来处理输入的文件。
- -f scriptfile:表示使用脚本文件- scriptfile中的指令来处理输入的文件。
- -n:只打印脚本处理后的结果,否则- sed会默认输出所有行。
- -i:直接修改文件内容,而不是输出到终端。
常见命令及操作
- 替换(s) :格式为 s/查找内容/替换内容/选项。例如,将文件中所有的 “apple” 替换为 “banana”,可以使用sed 's/apple/banana/g' filename。“g” 表示全局替换,如果不加 “g”,则每行只替换第一个匹配的 “apple”。
- 删除(d) :用于删除指定的行。例如,删除文件的第 3 行,使用 sed '3d' filename;删除文件中包含 “error” 的行,使用sed '/error/d' filename。
- 插入(i 和 a) :i表示在指定行之前插入,a表示在指定行之后插入。例如,在文件的第 2 行之前插入 “hello world”,使用sed '2i hello world' filename;在文件的第 4 行之后插入 “test”,使用sed '4a test' filename。
- 打印(p) :用于打印指定的行。例如,打印文件的第 5 行,使用 sed -n '5p' filename;打印文件中包含 “success” 的行,使用sed -n '/success/p' filename。
地址范围
地址范围可以指定要进行操作的行范围,格式为 [地址范围]操作 。例如:
- sed '1,5d' filename:删除文件的第 1 到第 5 行。
- sed '/start/,/end/s/old/new/g' filename:从包含 “start” 的行到包含 “end” 的行之间,将所有的 “old” 替换为 “new”。
其他功能
-  多行操作 :可以用 \将命令分多行书写,提高可读性。例如:- `sed -e ‘1,5d’ \
 -e ‘/error/d’ filename` 
-  脚本文件 :可以将多个 sed命令写入一个脚本文件,然后使用-f选项来执行。例如,创建一个脚本文件script.sed,内容为:- 1,5d
- /error/d
 
然后使用 sed -f script.sed filename 来执行。
- 结合其他命令 :可以和其他命令结合使用,如 grep、awk等,实现更复杂的数据处理。例如,先用grep找出包含 “info” 的行,再用sed替换其中的某些内容:- grep 'info' filename | sed 's/old/new/g'
 
6️⃣ 参考 6
sed(全称:stream editor,即流编辑器)是一种在Unix、Linux和其他类Unix系统中常用的命令行文本处理工具。它可以对文本文件进行查找、替换、删除和插入等操作,非常适合用于批量文本处理任务。
基本语法
sed [选项] '命令' 输入文件
常用选项
- -n:禁止自动打印模式空间,只有当命令明确要求输出时才打印。
- -e:允许在命令行上添加多个编辑命令。
- -f:从指定的文件中读取编辑命令。
- -i:直接修改输入文件,而不是将结果输出到标准输出。
常用命令
- p:打印当前模式空间的内容。
- d:删除当前模式空间的内容。
- s/old/new/:将当前模式空间中的“old”字符串替换为“new”字符串。
- i\:在当前行之前插入文本。
- a\:在当前行之后追加文本。
- c\:将选定的行改为新的指定的文本。
- y/old/new/:将当前模式空间中的字符“old”替换为“new”。
示例
- 打印文件中的所有行:
sed '' 文件名
- 打印文件中的第2行:
sed -n '2p' 文件名
- 删除文件中的第2行:
sed '2d' 文件名
- 将文件中的所有“old”替换为“new”:
sed 's/old/new/g' 文件名
- 在文件中的每行前面添加“prefix-”:
sed 's/^/prefix-/' 文件名
- 直接修改文件,将所有“old”替换为“new”:
sed -i 's/old/new/g' 文件名
这只是sed命令的一些基本用法,实际上sed的功能非常强大,可以通过组合多个命令和选项来完成更复杂的文本处理任务。
sed命令详解
 
sed(Stream Editor)是Linux/Unix系统中用于文本处理的流式编辑器,支持对文本进行查找、替换、删除、插入等操作[1][2][6]。以下是其核心功能和用法的详细解析:
一、基本语法
sed [选项] '命令' [输入文件]
- 选项:控制sed的行为(如直接修改文件、多命令执行等)。
- 命令:指定操作类型(如替换、删除、插入等)。
- 输入文件:可选,若省略则从标准输入读取数据[4][6]。
二、常用选项
| 选项 | 作用 | 
|---|---|
| -i | 直接修改原文件(而非输出到终端)[2][5]。 | 
| -e | 执行多个命令(可重复使用),例如 -e 's/old/new/' -e 'd'[2][6]。 | 
| -n | 禁止默认输出,仅显示经过处理的行(需配合 p命令使用)[4][6]。 | 
三、核心命令与操作
-  替换(Substitution) 
 语法:s/模式/替换内容/- 将匹配“模式”的文本替换为“替换内容”。
- 示例:将文件file.txt中的foo替换为bar:sed 's/foo/bar/g' file.txt # `g`表示全局替换[^2^][^5^]
 
-  删除(Delete) 
 语法:d- 删除当前行。
- 示例:删除第3行:sed '3d' file.txt # 或指定行范围,如`3,5d`删除3-5行[^3^][^5^]
 
-  插入(Insert) 
 语法:i\后接内容- 在当前行上方插入内容。
- 示例:在第2行前插入New Line:sed '2i\New Line' file.txt # 使用`a\`表示在行下方插入[^3^][^5^]
 
-  打印(Print) 
 语法:p- 输出缓冲区中的文本。常与-n选项配合使用。
- 示例:仅打印包含error的行:sed -n '/error/p' file.txt # `/pattern/p`表示匹配行才打印[^4^][^6^]
 
- 输出缓冲区中的文本。常与
-  定界符与多命令 - 若命令中包含/,可通过更改定界符避免冲突,例如s:/old/:/new/:g。
- 多命令用-e或分号分隔,例如:sed -e 's/foo/bar/' -e '3d' file.txt # 先替换,再删除第3行[^2^][^6^]
 
- 若命令中包含
四、高级功能
-  正则表达式支持 - sed支持基础正则表达式,例如- ^(行首)、- $(行尾)、- .(任意字符)等。
- 示例:删除空行:sed '/^$/d' file.txt # 匹配空行并删除[^3^][^5^]
 
-  分组与引用 - 使用\1,\2等引用括号分组内容。
- 示例:将Chapter 1改为Section 1:sed 's/\(Chapter \)[0-9]+\1/Section \1/' file.txt # 替换分组内容[^5^]
 
- 使用
-  脚本文件与复杂操作 - 将多条命令写入脚本文件(如commands.sed),通过sed -f commands.sed file.txt执行。
- 示例:批量替换多个单词:s/foo/bar/g s/test/demo/g
 
- 将多条命令写入脚本文件(如
五、应用场景
-  批量文本处理 - 快速修改配置文件、日志文件或代码中的特定内容[1][4]。
- 示例:批量替换代码中的变量名:sed -i 's/oldVar/newVar/g' *.c # 修改所有`.c`文件中的变量名[^2^][^5^]
 
-  数据清洗 - 删除多余空行、提取特定字段或格式化文本[3][6]。
 
-  脚本自动化 - 结合Shell脚本实现复杂文本处理流程,例如日志分析或数据预处理[5]。
 
六、注意事项
- 备份原文件 - 使用-i选项时,建议先备份文件(如cp file.txt file.bak),避免误操作[4]。
 
- 使用
- 区分sed与awk- sed擅长简单文本替换和删除,而- awk更适合基于条件的复杂文本处理[1][6]。
 
- 性能优化 - 对大文件处理时,优先使用流式处理(如sed 's/pattern/replace/g' largefile),避免加载整个文件到内存[4]。
 
- 对大文件处理时,优先使用流式处理(如
通过灵活组合选项和命令,sed可高效解决多种文本处理需求。更多细节可参考man sed或查看具体系统的帮助文档[3][6]。
7️⃣ 参考 7

sed命令详解与使用指南
sed(Stream Editor)是Linux/Unix系统中的流式文本编辑器,通过模式匹配+文本操作实现非交互式文本处理。其核心优势在于逐行处理能力和正则表达式支持。
一、基础语法结构
sed [选项] '操作指令' 输入文件
典型示例:
sed 's/foo/bar/g' file.txt  # 全局替换foo为bar
sed -i.bak '3d' config.cfg  # 删除第3行并创建备份文件
二、核心功能模块
-  常用选项(OPTIONS) 选项 功能说明 -n抑制默认输出,常与 p命令配合使用-i[SUFFIX]直接修改源文件(谨慎使用),可选备份后缀 -r启用扩展正则表达式 -e执行多条命令,如 sed -e 's/a/b/' -e '3d'
-  核心命令(COMMANDS) 命令 格式示例 功能 替换 `s/pattern/replacement/[g p 删除 d删除匹配行,如 sed '/error/d' log.txt打印 p输出指定内容,需配合 -n选项追加 a\text在匹配行后追加文本 插入 i\text在匹配行前插入文本 
-  地址匹配规则 sed '3s/old/new/' file # 仅在第3行替换 sed '/start/,/end/d' file # 删除start到end之间的所有行 sed '5,$p' file # 打印第5行到末尾
三、高级应用技巧
- 多命令组合sed -e 's/foo/bar/; 5d' file.txt # 替换后删除第5行
- 正则表达式扩展sed -r 's/(\d+)-(\d+)/\2:\1/' phone.txt # 用分组重组电话号码
- 脚本文件调用sed -f script.sed input.txt # 调用预存命令脚本
四、安全操作建议
- 测试命令时先省略-i选项,确认无误后再执行真实修改
- 使用-i.bak创建备份文件,防止误操作
- 复杂正则表达式建议先用echo | sed验证
五、典型应用场景
- 日志清洗:sed '/ERROR/d; s/DEBUG/INFO/' app.log
- 配置文件修改:sed -i '/^#Port/s/#Port/Port/' sshd_config
- 数据格式转换:sed 's/\(.*\)/\U\1/' names.txt(转大写)
8️⃣ 参考 8
sed(Stream Editor)是Linux/Unix系统中强大的流式文本处理工具,支持非交互式的批量编辑操作。以下从核心功能、语法结构、实战案例等方面进行详解:
一、核心功能与原理
-  流式处理机制 
 sed逐行读取输入(文件或标准输入流),将当前行存入模式空间(Pattern Space),按脚本命令处理后输出,再清空缓冲区进入下一循环。默认不修改原文件,仅输出到终端,需通过-i选项直接编辑文件。
-  主要功能 
 • 替换文本:如批量修改字符串• 删除/插入行:根据行号或正则匹配操作 • 过滤与提取:打印特定行或匹配内容 • 复杂脚本处理:支持分支、循环等高级操作 
二、基础语法与常用命令
sed [选项] '操作指令' 输入文件
常用选项
| 选项 | 说明 | 
|---|---|
| -n | 禁止默认输出,常与 p命令配合显示指定内容 | 
| -e | 执行多条命令(例: sed -e 's/a/b/' -e 'd') | 
| -i | 直接修改原文件(危险操作,建议备份) | 
| -r | 启用扩展正则表达式 | 
核心操作指令
| 命令 | 功能 | 示例 | 
|---|---|---|
| s/replace/new/ | 替换首个匹配内容 | sed 's/old/new/g'(全局替换) | 
| d | 删除行 | sed '3d'(删第3行) | 
| a\text | 行后追加文本 | sed '/pattern/a\new line' | 
| i\text | 行前插入文本 | sed '2i\header'(第2行前插入) | 
| p | 打印内容 | sed -n '1,5p'(仅显示1-5行) | 
三、地址定位与正则表达式
-  地址范围 
 • 行号:3,5(第3到5行)• 正则匹配: /^start/,/end$/(匹配以start开头到end结尾的行)• 特殊符号: $表示末行,1~2表示从第1行开始每隔2行处理
-  正则元字符 符号 含义 ^行首锚定(例: /^#/匹配注释行)$行尾锚定(例: /txt$/匹配以txt结尾的行).*任意字符(贪婪匹配) \<单词开头(例: /\<word匹配以word开头的单词)
四、实战案例
-  批量替换域名 sed -i 's/www.old.com/www.new.com/g' *.conf # 替换所有.conf文件中的旧域名
-  删除注释行与空行 sed -i '/^#/d; /^$/d' script.sh # 删除以#开头的行和空行
-  插入版权信息 sed '1i\/* Copyright 2025 */' code.c # 在文件首行插入版权声明
-  提取特定范围内容 sed -n '/START/,/END/p' data.log # 打印START到END之间的内容
五、高级技巧
-  多点编辑 
 使用-e执行多个命令,或分号分隔:sed -e '1,5d' -e 's/error/warning/' log.txt # 先删除1-5行,再替换error
-  引用匹配内容 
 在替换中使用&引用匹配项,或\1引用分组:sed 's/[0-9]/&th/g' # 将数字后加th(如2→2th) sed 's/\(love\)able/\1rs/' # loveable→lovers
-  模式空间与保持空间 
 通过h(复制到缓冲区)、G(追加到模式空间)实现跨行操作。
总结
 sed通过简洁的脚本语法实现高效文本处理,尤其适合自动化场景。掌握基础命令后,可结合正则表达式和地址定位处理复杂需求。更高级的标签跳转、条件分支等功能可参考官方文档或进阶教程。
9️⃣ 参考 9
sed(Stream Editor)是一个强大的文本处理工具,广泛用于在类Unix操作系统中进行文本替换、删除、插入和搜索等操作。以下是sed命令的详细解释:
基本语法
sed [选项] '命令' 文件
常用选项
- -n:抑制自动打印模式空间内容,通常与- p命令一起使用以仅输出特定行。
- -e:指定要执行的命令,可以多次使用。
- -f:从文件中读取- sed命令。
- -i:直接修改文件内容(就地编辑)。
基本命令
-  替换(Substitution) sed 's/模式/替换内容/' 文件- s:表示替换操作。
- /模式/:要匹配的模式。
- /替换内容/:用于替换的内容。
- 默认情况下,sed只替换每行中第一次匹配的内容。
 示例:将每行中的 foo替换为bar。sed 's/foo/bar/' 文件
-  删除(Delete) sed 'Nd' 文件- N:要删除的行号。
- d:删除命令。
 示例:删除第3行。 sed '3d' 文件
-  插入和追加(Insert & Append) -  插入(Insert):在指定行之前插入内容。 sed 'Ni\新内容' 文件- i\:插入命令。
 
-  追加(Append):在指定行之后追加内容。 sed 'Na\新内容' 文件- a\:追加命令。
 
 示例:在第2行之前插入 新行。sed '2i\新行' 文件
-  
-  打印特定行(Print) sed -n 'Np' 文件- -n:抑制自动打印。
- p:打印命令。
 示例:仅打印第5行。 sed -n '5p' 文件
-  范围操作(Range) sed '起始行,结束行命令' 文件示例:替换第2到第4行中的 foo为bar。sed '2,4s/foo/bar/' 文件
-  多命令执行 使用 -e选项可以在一行中执行多个sed命令。示例:先删除第1行,然后在第3行插入 新行。sed -e '1d' -e '3i\新行' 文件
高级用法
-  使用正则表达式 sed支持使用正则表达式进行复杂的模式匹配和替换。示例:删除所有以 #开头的行。sed '/^#/d' 文件
-  保持和交换(Hold and Exchange) sed提供了保持空间(hold space)和模式空间(pattern space)的交换操作,用于更复杂的文本处理。示例:交换每两行。 sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' 文件
-  使用变量 可以结合Shell变量进行动态替换。 示例:将 foo替换为变量VAR的值。VAR="bar" sed "s/foo/$VAR/" 文件
常用示例
-  替换文件中所有 old为new并保存结果到新文件sed 's/old/new/g' 文件 > 新文件
-  删除空行 sed '/^$/d' 文件
-  在文件末尾追加内容 sed '$a\追加的内容' 文件
-  在匹配行之前插入内容 sed '/匹配模式/i\插入的内容' 文件
-  将替换结果直接应用于文件(谨慎使用) sed -i 's/old/new/g' 文件
注意事项
-  备份文件:在使用 -i选项进行就地编辑时,建议使用备份选项以防止数据丢失。sed -i.bak 's/old/new/g' 文件这将在修改文件之前创建一个名为 文件.bak的备份。
-  转义字符:在使用特殊字符(如 /、&等)时,需要进行适当的转义。sed 's/\/old\//\/new\//g' 文件
-  性能考虑:对于非常大的文件, sed可能会消耗较多内存和处理时间,需根据实际情况选择合适的工具。
总结
sed是一个功能强大的文本处理工具,适用于各种文本替换、删除、插入和搜索任务。掌握其基本命令和高级用法,可以极大地提高文本处理的效率和效果。建议通过实际练习和资料来深入理解sed的使用方法。
🔟 参考 10
以下是关于 sed 命令的详细解析,结合其核心功能、语法及实战应用场景整理而成:
一、sed 基础概念
sed(Stream Editor)是 Linux/Unix 系统中强大的流编辑器,用于对文本流进行非交互式编辑。其核心流程为:
- 读取一行到模式空间(Pattern Space);
- 执行命令(如替换、删除、插入等);
- 输出结果(默认打印修改后的行);
- 循环处理下一行,直至文件末尾。
二、基本语法
sed [选项] '命令' 输入文件
- 常用选项: - -n:禁止默认输出,仅显示处理后的行。
- -e:允许多条命令执行(命令顺序影响结果)。
- -i:直接修改原文件(慎用,建议备份:- -i.bak)。
- -r:支持扩展正则表达式。
 
三、核心命令与操作
1. 地址范围
- 单行:1(第1行)、$(最后一行)。
- 行区间:1,5(第1-5行)、5,$(第5行到最后)。
- 正则匹配:/pattern/(匹配含pattern的行)、\cpatternc(转义字符匹配)。
2. 常用命令
| 命令 | 功能 | 示例 | 
|---|---|---|
| s | 替换文本 | s/old/new/g(全局替换) | 
| d | 删除行 | /pattern/d(删除含pattern的行) | 
| *i* | 插入文本 | /pattern/i\插入内容(匹配行前插入) | 
| *a* | 追加文本 | /pattern/a\追加内容(匹配行后追加) | 
| p | 打印行 | -n '/pattern/p'(仅打印匹配行) | 
| *c* | 替换整行 | 2,5c\新内容(替换第2-5行为新内容) | 
3. 高级命令
- 保持与获取缓冲区: - h:将当前行复制到保持缓冲区。
- H:追加到保持缓冲区。
- g:用保持缓冲区内容覆盖模式空间。
- G:追加保持缓冲区内容到模式空间。
 
- 分支命令: - b label:跳转到标签处执行。
- t label:条件满足时跳转。
 
四、替换操作详解
1. 基本替换
sed 's/apple/orange/g' file.txt  # 全局替换所有 "apple" 为 "orange"
- 标志: - g:全局替换(默认仅替换每行第一个匹配项)。
- p:打印替换后的行(常与- -n配合)。
- w file:将结果写入文件。
 
2. 特殊替换
- 引用匹配内容: - s/\(pattern\)/\1/g:用捕获组内容替换(如- s/\(love\)/\1able/g→- lovable)。
- &:在替换文本中引用完整匹配项(如- s/foo/&bar/g→- foobar)。
 
- 字符转换: - y/abc/XYZ/:逐字符替换(- a→X,- b→Y,- c→Z)。
 
五、实战应用案例
1. 批量替换
sed -i 's/www.old.com/www.new.com/g' *.html  # 批量替换所有 HTML 文件中的域名
2. 删除注释行
sed '/^#/d' config.sh  # 删除以 # 开头的注释行
3. 添加版权信息
sed -i '1i\/*\n * Copyright 2024 *\n */' *.c  # 在所有 C 文件开头插入版权声明
4. 提取特定列
sed -n '2p' data.txt  # 打印第2行
sed -n '/start/,/end/p' file  # 打印 start 到 end 之间的行
六、选项与注意事项
- 直接修改文件:使用 -i选项时,建议备份原文件(如sed -i.bak 's/old/new/g' file)。
- 正则表达式:默认使用基础正则,需用 -r启用扩展正则(如+、?等元字符)。
- 性能优化:处理大文件时,可结合 --unbuffered(-u)选项减少内存占用。
七、总结
sed 通过流式处理和脚本化操作,成为文本处理的利器。掌握其核心命令(如 s、d、i)和地址范围控制,可高效完成日志过滤、配置修改等任务。对于复杂需求,可结合分支、保持缓冲区等高级功能编写脚本。
