用sed替换文本 笔记250419

用sed替换文本 笔记250419

以下是使用 sed 替换文本的 详细操作指南,涵盖常见场景和实用示例:


一、基础替换语法

bash 复制代码
sed 's/原内容/替换内容/[选项]' 文件
  • 核心参数
    • s:替换命令。
    • /:分隔符(可替换为其他字符如 |#)。
    • 原内容:支持正则表达式。
    • 替换内容:普通文本或引用分组(如 \1)。
    • 选项g(全局替换)、i(忽略大小写)、p(打印匹配行)等。

二、常见场景示例

1. 简单字符串替换
bash 复制代码
# 将文件中的 "apple" 替换为 "orange"(默认每行仅替换第一个匹配)
sed 's/apple/orange/' file.txt

# 全局替换所有匹配项(添加 `g` 选项)
sed 's/apple/orange/g' file.txt
2. 替换时忽略大小写
bash 复制代码
# 将 "Apple"、"APPLE" 等替换为 "orange"(`i` 选项)
sed 's/apple/orange/gi' file.txt
3. 替换特殊字符(如 /&
bash 复制代码
# 替换路径中的 "/old/path" 为 "/new/path"(更换分隔符避免转义)
sed 's|/old/path|/new/path|g' file.txt

# 将 "version" 替换为 "Version: &"(`&` 表示匹配的完整内容)
echo "version=1.0" | sed 's/version/Version: &/i'
# 输出:Version: version=1.0
4. 使用分组重组内容 , 分组替换 , 捕获组,反向引用
bash 复制代码
# 将日期格式从 "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

sed 命令中的分组(Grouping)是正则表达式的重要功能,通过 () 将部分模式标记为一个整体,并可通过反向引用在替换操作中重用这些分组内容。

bash 复制代码
echo "123-456" | sed -r 's/([0-9]+)-([0-9]+)/\2-\1/'  # 输出 456-123
  • () 分组,\1, \2 引用分组。 从 \1 开始, 第一个是 \1
  • ⚠️ sed 不支持 (?:) 语法,所有 () 均为捕获分组。

sed的分组替换,捕获组,反向引用 笔记250419

5. 删除内容(替换为空)
bash 复制代码
# 删除所有数字
sed 's/[0-9]//g' file.txt

# 删除行尾空格
sed 's/[[:space:]]*$//' file.txt
6. 条件替换(限定行范围)
bash 复制代码
# 仅在第 3 到 5 行替换 "error" 为 "warning"
sed '3,5s/error/warning/g' log.txt

# 在包含 "DEBUG" 的行中替换 "old" 为 "new"
sed '/DEBUG/s/old/new/' file.txt

三、高级技巧

1. 多命令组合
bash 复制代码
# 同时替换多个内容(分号分隔命令)
sed 's/apple/orange/g; s/banana/grape/g' file.txt

# 或使用 `-e` 参数
sed -e 's/apple/orange/g' -e 's/banana/grape/g' file.txt
2. 直接修改文件
bash 复制代码
# 直接修改文件内容(原文件会被覆盖,-i 选项)
sed -i 's/apple/orange/g' file.txt

# 修改前备份原文件(生成 file.txt.bak 备份)
sed -i.bak 's/apple/orange/g' file.txt
3. 动态引用 Shell 变量
bash 复制代码
old="apple"
new="orange"
sed "s/$old/$new/g" file.txt  # 使用双引号允许变量展开
4. 处理多行文本
bash 复制代码
# 将两行合并为一行(例如将 "line1\nline2" 改为 "line1|line2")
sed 'N; s/\n/|/' file.txt

四、调试与安全建议

  1. 先预览结果 :执行命令时先不加 -i,确认无误后再实际修改文件。

    bash 复制代码
    sed 's/apple/orange/g' file.txt  # 查看输出
    sed -i 's/apple/orange/g' file.txt  # 确认后执行
  2. 备份文件 :使用 -i.bak 生成备份文件。

  3. 转义特殊字符 :若替换内容包含 /& 等符号,建议更换分隔符(如 s|old|new|g)。


五、实战示例

1. 清理配置文件注释
bash 复制代码
# 删除所有以 `#` 开头的注释行
sed '/^#/d' config.conf

# 删除行内注释(如 "key=value # comment" → "key=value")
sed 's/[[:space:]]*#.*$//' config.conf
2. 批量重命名文件
bash 复制代码
# 将当前目录下所有 .txt 文件改为 .md
find . -name "*.txt" | sed 's/\(.*\)\.txt/mv "&" "\1.md"/' | sh
3. 格式化 JSON 数据
bash 复制代码
# 将单行 JSON 转换为多行(简化版)
echo '{"name":"John","age":30}' | sed 's/{/\{\n/g; s/,/,\n/g; s/}/\n}/g'

总结

  • 核心命令s/pattern/replacement/flags
  • 安全第一 :先测试命令,再使用 -i 修改文件。
  • 正则灵活 :结合分组、字符类(如 [0-9]\w)等实现精准匹配。

通过组合这些技巧,你可以高效完成几乎任何文本替换任务!




1️⃣ 参考 1

sed替换文本 功能是其最常用的操作,主要通过 s 命令实现。以下是详细用法和示例:


基本语法

bash 复制代码
sed 's/原内容/替换内容/[标志]' 文件名
  • 分隔符 :默认使用 /,但可替换为 |#: 等(避免与内容冲突,例如替换路径时可用 |)。
  • 标志 (可选):
    • g:全局替换(默认只替换每行第一个匹配项)。
    • p:打印替换后的行(需配合 -n 选项使用)。
    • iI:忽略大小写(需配合扩展正则表达式选项如 -E-r)。
    • 数字:替换指定第 N 个匹配项(例如 s/old/new/2 替换每行第二个匹配项)。

常见场景示例

1. 全局替换
bash 复制代码
# 替换所有 "apple" 为 "orange"
sed 's/apple/orange/g' file.txt

# 替换每行的第二个 "apple"
sed 's/apple/orange/2' file.txt
2. 直接修改文件
bash 复制代码
# 使用 -i 选项直接修改文件(谨慎操作!)
sed -i 's/old/new/g' file.txt

# macOS 需指定备份后缀(例如空字符串)
sed -i '' 's/old/new/g' file.txt
3. 替换指定行
bash 复制代码
# 仅替换第3行的第一个 "old"
sed '3s/old/new/' file.txt

# 替换第5到第10行的所有 "old"
sed '5,10s/old/new/g' file.txt

# 替换以 "start" 开头的行
sed '/^start/s/old/new/g' file.txt
4. 忽略大小写
bash 复制代码
# 使用 -E(扩展正则)和 i 标志
sed -E 's/foo/bar/gi' file.txt
5. 使用其他分隔符
bash 复制代码
# 替换路径(避免转义 /)
sed 's|/usr/bin|/usr/local/bin|g' file.txt
6. 删除匹配内容
bash 复制代码
# 删除所有 "old"
sed 's/old//g' file.txt

# 删除行尾的空白字符
sed 's/\s*$//' file.txt
7. 正则表达式分组
bash 复制代码
# 捕获分组并引用(例如交换两列内容)
sed -E 's/([a-z]+),([0-9]+)/\2,\1/' data.txt

# 替换日期格式(从 YYYY-MM-DD 到 DD/MM/YYYY)
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/' dates.txt

高级用法

1. 仅打印发生替换的行
bash 复制代码
sed -n 's/pattern/replacement/p' file.txt
2. 多重条件替换
bash 复制代码
# 替换第3行的 "foo" 和第5行的 "bar"
sed -e '3s/foo/new/' -e '5s/bar/new/' file.txt

# 或合并为一个命令
sed '3s/foo/new/; 5s/bar/new/' file.txt
3. 替换包含特殊字符的内容
bash 复制代码
# 替换包含斜杠的内容(需转义)
sed 's/\/path\/to\/old/\/new\/path/g' file.txt

# 或换用其他分隔符
sed 's#/path/to/old#/new/path#g' file.txt
4. 使用变量传递替换内容
bash 复制代码
# 在脚本中动态替换
old="hello"
new="world"
sed "s/$old/$new/g" file.txt

注意事项

  1. 测试命令 :使用 sed 前先不加 -i 选项,确认结果正确后再保存。
  2. 正则转义 :特殊字符(如 *$^)需用 \ 转义。
  3. 备份文件 :使用 -i.bak 生成备份文件(例如 sed -i.bak 's/old/new/g' file.txt)。




2️⃣ 参考 2

使用 sed 命令替换文本的详细指南

sed(Stream Editor)是 Linux 和类 Unix 系统中强大的流式文本编辑器,擅长对文本进行替换、删除、插入等操作。以下是 sed 替换文本的详细用法和示例:


一、基本替换语法

bash 复制代码
sed 's/原字符串/新字符串/[选项]' 文件名
  • s:表示替换操作(substitute)。
  • 原字符串:支持正则表达式,匹配要替换的内容。
  • 新字符串:替换后的内容。
  • 选项 (可选):
    • g:全局替换(替换所有匹配项,默认只替换每行第一个匹配项)。
    • i:忽略大小写(如 sed 's/hello/hi/i' file.txt)。
    • 数字(如 2):替换每行第 N 个匹配项(如 sed 's/apple/orange/2' file.txt)。

二、常用替换示例

1. 简单替换
  • 替换每行第一个匹配项

    bash 复制代码
    sed 's/old/new/' file.txt
  • 全局替换(所有匹配项)

    bash 复制代码
    sed 's/old/new/g' file.txt
2. 指定行替换
  • 替换第3行的内容

    bash 复制代码
    sed '3s/old/new/' file.txt
  • 替换第2到第5行的内容

    bash 复制代码
    sed '2,5s/old/new/g' file.txt
3. 使用正则表达式
  • 替换以 httphttps 开头的 URL

    bash 复制代码
    sed -r 's/(http|https)://\1/g' file.txt
    • -r:启用扩展正则表达式。
    • \1:引用第一个捕获组(httphttps)。
4. 直接修改文件
  • 替换并保存修改 (慎用,建议先不加 -i 测试):

    bash 复制代码
    sed -i 's/old/new/g' file.txt
  • 替换并备份原文件

    bash 复制代码
    sed -i.bak 's/old/new/g' file.txt  # 生成 file.txt.bak 备份文件
5. 高级替换技巧
  • 引用捕获组 (替换错误信息并添加时间戳):

    bash 复制代码
    sed 's/(Error): (.*)/[$(date)] \1: \2/' log.txt
  • 地址范围指定 (在第1行前插入注释):

    bash 复制代码
    sed '1 i# This is a comment' script.sh
  • 删除匹配行 (删除包含 error 的行):

    bash 复制代码
    sed '/error/d' file.txt

三、多命令执行

  • 使用分号 ; 执行多个命令

    bash 复制代码
    sed 's/a/b/; s/c/d/' file.txt
  • 使用 -e 执行多个命令

    bash 复制代码
    sed -e 's/a/b/' -e 's/c/d/' file.txt

四、从脚本文件读取命令

  • 执行脚本文件中的命令

    bash 复制代码
    sed -f script.sed file.txt
    • script.sed 文件内容示例:

      sed 复制代码
      s/old1/new1/g
      s/old2/new2/g

五、替换并打印结果

  • 替换并打印替换内容-np 选项组合使用):

    bash 复制代码
    sed -n 's/old/new/gp' file.txt

六、注意事项

  1. 特殊字符转义

    • 如果 原字符串新字符串 包含 /&\ 等特殊字符,需用 \ 转义。
    • 示例:sed 's/\/old/\/new/g' file.txt
  2. 跨平台兼容性

    • macOS 的 sed 与 GNU sed 略有不同,建议使用 GNU sed(通过 brew install gnu-sed 安装)。
  3. 备份文件

    • 使用 -i 直接修改文件前,务必备份重要文件。

通过灵活组合这些用法,sed 可以高效完成复杂的文本替换任务。建议通过实际案例练习巩固!




3️⃣ 参考 3

以下是使用 sed 命令进行文本替换的详细说明和示例:


1. 基本语法

bash 复制代码
sed 's/旧字符串/新字符串/标志' 文件名
  • s:表示替换(substitute)操作。
  • / :分隔符(可替换为其他字符,如 #|,避免与字符串中的 / 冲突)。
  • 标志 :可选,控制替换行为:
    • g:全局替换(替换所有匹配项,而非仅第一个)。
    • p:替换后打印该行(常与 -n 结合使用)。
    • i:忽略大小写。
    • w 文件:将替换后的行写入指定文件。

2. 常见用法示例

(1) 简单替换(仅替换每行第一个匹配项)
bash 复制代码
# 将文件中每行的第一个 "apple" 替换为 "banana"
sed 's/apple/banana/' example.txt

输入

复制代码
apple banana apple

输出

复制代码
banana banana apple

(2) 全局替换(替换所有匹配项)
bash 复制代码
# 将文件中所有 "apple" 替换为 "banana"
sed 's/apple/banana/g' example.txt

输入

复制代码
apple banana apple

输出

复制代码
banana banana banana

(3) 直接修改原文件
bash 复制代码
# 直接修改文件内容(不推荐,除非确认操作正确)
sed -i 's/apple/banana/g' example.txt

(4) 备份原文件后修改
bash 复制代码
# 修改文件并生成备份(扩展名为 .bak)
sed -i.bak 's/apple/banana/g' example.txt

(5) 替换特定行的内容
bash 复制代码
# 替换第3行的第一个 "apple"
sed '3s/apple/banana/' example.txt

# 替换第5到第10行的所有 "apple"
sed '5,10s/apple/banana/g' example.txt

(6) 忽略大小写替换
bash 复制代码
# 忽略大小写,将 "Apple"、"APPLE" 等替换为 "banana"
sed 's/apple/banana/gI' example.txt

(7) 使用正则表达式
bash 复制代码
# 替换以数字开头的行中的数字(例如 "123abc" → "NUMabc")
sed 's/[0-9]\+/NUM/g' numbers.txt

# 使用扩展正则表达式(需 -E 或 -r 选项)
sed -E 's/(old)(text)/new\1/g' file.txt  # 输出 "newoldtext"

(8) 复杂替换(如替换最后一个匹配项)
bash 复制代码
# 替换每行最后一个出现的 "apple"
sed 's/\(.*\)apple/\1banana/' example.txt

(9) 多命令组合
bash 复制代码
# 先替换 "apple" 为 "banana",再删除包含 "orange" 的行
sed -e 's/apple/banana/g' -e '/orange/d' fruits.txt

3. 特殊字符处理

如果替换内容包含 /& 等特殊字符,需转义或更换分隔符:

bash 复制代码
# 替换路径中的 "/"(使用 "#" 作为分隔符)
sed 's#old/path/new#new/path/updated#g' config.txt

# 使用 "&" 引用匹配内容(如在末尾添加 "_copy")
sed 's/\(.*\)/\1_copy/' filenames.txt

4. 实际应用示例

示例1:替换配置文件中的端口号
bash 复制代码
# 将配置文件中的 "port=8080" 替换为 "port=9090"
sed -i 's/port=8080/port=9090/' config.ini
示例2:替换日志文件中的敏感信息
bash 复制代码
# 将日志中的密码字段替换为 "******"
sed 's/\(password=\)\S*/\1******/' log.txt
示例3:批量替换多个文件
bash 复制代码
# 将所有 .txt 文件中的 "old" 替换为 "new"
sed -i 's/old/new/g' *.txt

5. 注意事项

  1. 备份文件 :使用 -i 时建议添加备份扩展名(如 -i.bak)。
  2. 特殊字符转义 :正则表达式中的特殊字符(如 .*$)需用 \ 转义。
  3. 多行处理sed 默认逐行处理,需用 N 命令将多行合并到模式空间。

6. 总结

sed 是文本替换的利器,通过以下步骤快速上手:

  1. 基础替换sed 's/旧/新/' 文件
  2. 全局替换 :添加 g 标志。
  3. 修改原文件 :使用 -i 选项。
  4. 正则表达式:灵活使用正则匹配复杂模式。

通过组合选项和命令,可以高效完成从简单到复杂的文本替换任务。




4️⃣ 参考 4

以下为你详细介绍如何使用 sed 命令来替换文本,包含不同场景下的示例:

1. 替换每行第一个匹配项

假设你有一个名为 test.txt 的文件,内容如下:

复制代码
apple is good, apple is delicious.

若要将每行的第一个 apple 替换成 banana,可使用以下命令:

bash 复制代码
sed 's/apple/banana/' test.txt

该命令中的 s 是替换命令,apple 为要被替换的旧字符串,banana 是新字符串。执行后输出结果为:

复制代码
banana is good, apple is delicious.

2. 全局替换每行所有匹配项

若要把 test.txt 文件里每行的所有 apple 都替换成 banana,可添加 g 修饰符:

bash 复制代码
sed 's/apple/banana/g' test.txt

执行后输出结果为:

复制代码
banana is good, banana is delicious.

3. 使用其他分隔符

当替换内容里包含 / 时,为避免频繁转义,可采用其他分隔符,像 #| 等。例如,要把 http://example.com 替换成 https://example.com,可使用如下命令:

bash 复制代码
sed 's#http://example.com#https://example.com#' test.txt

4. 不区分大小写替换

如果想不区分大小写进行替换,可结合 -i 选项(注意这里的 -i 不是修改文件的 -i,而是 s 命令的修饰符)。假设文件内容如下:

复制代码
Apple is good, apple is delicious.

使用以下命令:

bash 复制代码
sed 's/apple/banana/gi' test.txt

执行后输出结果为:

复制代码
banana is good, banana is delicious.

5. 替换指定位置的匹配项

若要替换每行的第 n 个匹配项,可在 s 命令后指定数字。例如,替换每行的第二个 applebanana

bash 复制代码
sed 's/apple/banana/2' test.txt

6. 直接修改文件内容

若要直接修改文件内容,可使用 -i 选项。例如,将 test.txt 文件里的所有 apple 替换成 banana

bash 复制代码
sed -i 's/apple/banana/g' test.txt

这里需要注意,使用 -i 会直接修改原文件,所以操作前最好先备份文件。

7. 结合正则表达式进行替换

sed 支持使用正则表达式来匹配更复杂的模式。例如,把所有以 .com 结尾的域名替换成 .org

bash 复制代码
sed 's/[a-zA-Z0-9.-]*\.com/&.org/g' test.txt

其中 & 代表匹配到的字符串。

总结

sed 的替换功能十分强大,借助不同的选项和修饰符,能够灵活应对各种文本替换需求。关键在于理解 s 命令的用法以及修饰符的作用。若你有特定的替换需求,可以提供更详细的信息,我会给出更贴合需求的示例。




5️⃣ 参考 5

sed 是一个强大的流编辑器,可以用来对文本进行各种操作,其中最常见的操作之一就是替换文本。以下是详细的 sed 替换操作示例和解释:

基本语法

sed 替换文本的基本语法是:

shell 复制代码
sed 's/查找内容/替换内容/选项' 文件名

示例和解释

1. 替换每行的第一个匹配项
shell 复制代码
sed 's/old/new/' filename

这会将文件 filename 中每一行的第一个 "old" 替换为 "new"。

2. 全局替换
shell 复制代码
sed 's/old/new/g' filename

这会将文件 filename 中每一行的所有 "old" 替换为 "new"。

3. 替换指定行的文本
shell 复制代码
sed '2s/old/new/g' filename

这会将文件 filename 中第 2 行的所有 "old" 替换为 "new"。

4. 替换匹配模式的行
shell 复制代码
sed '/pattern/s/old/new/g' filename

这会将文件 filename 中匹配 /pattern/ 的行中的所有 "old" 替换为 "new"。

5. 替换指定范围内的行
shell 复制代码
sed '1,5s/old/new/g' filename

这会将文件 filename 中第 1 到第 5 行的所有 "old" 替换为 "new"。

6. 替换大小写
shell 复制代码
sed 's/[Oo][Ll][Dd]/new/g' filename

这会将文件 filename 中所有 "Old"、"old"、"oLd" 等大小写混合的 "old" 替换为 "new"。

常见选项

  • g:全局替换,替换每一行中的所有匹配项。
  • p:打印被替换的行。
  • i:忽略大小写匹配。
  • n:只输出被替换的行。

实际应用示例

假设有一个文件 test.txt,内容如下:

复制代码
apple banana orange
apple banana orange
apple banana orange
示例 1:替换所有 "apple" 为 "fruit"
shell 复制代码
sed 's/apple/fruit/g' test.txt

输出:

复制代码
fruit banana orange
fruit banana orange
fruit banana orange
示例 2:替换第 2 行的 "banana" 为 "fruit"
shell 复制代码
sed '2s/banana/fruit/g' test.txt

输出:

复制代码
apple banana orange
apple fruit orange
apple banana orange
示例 3:替换包含 "orange" 的行中的 "apple" 为 "fruit"
shell 复制代码
sed '/orange/s/apple/fruit/g' test.txt

输出:

复制代码
fruit banana orange
fruit banana orange
fruit banana orange
示例 4:替换第 1 到第 2 行的 "apple" 为 "fruit"
shell 复制代码
sed '1,2s/apple/fruit/g' test.txt

输出:

复制代码
fruit banana orange
fruit banana orange
apple banana orange
示例 5:替换大小写不敏感的 "Apple" 为 "fruit"
shell 复制代码
sed 's/[Aa][Pp][Pp][Ll][Ee]/fruit/g' test.txt

输出:

复制代码
fruit banana orange
fruit banana orange
fruit banana orange

通过这些示例,你可以看到 sed 在替换文本方面的强大功能。你可以根据实际需求灵活使用这些命令。




6️⃣ 参考 6

使用 sed 命令替换文本中的内容是一项常见任务。以下是使用 sed 进行文本替换的基本步骤和示例:

基本语法

bash 复制代码
sed 's/要替换的内容/替换后的内容/' 输入文件
  • s 表示替换操作。
  • / 是分隔符,可以用其他字符代替,比如 #
  • 要替换的内容 是你要查找的文本。
  • 替换后的内容 是你要替换成的新文本。

示例

  1. 替换文件中的特定文本

假设有一个文件 example.txt,内容如下:

复制代码
Hello world
Hello everyone
Goodbye world

要将所有的 "world" 替换为 "Earth":

bash 复制代码
sed 's/world/Earth/' example.txt

输出结果:

复制代码
Hello Earth
Hello everyone
Goodbye Earth
  1. 全局替换

如果文件中有多处需要替换的内容,可以使用 g 标志进行全局替换:

bash 复制代码
sed 's/world/Earth/g' example.txt
  1. 替换文件并保存更改

默认情况下,sed 只会将结果输出到标准输出。如果要直接修改文件,可以使用 -i 选项:

bash 复制代码
sed -i 's/world/Earth/g' example.txt

注意 :使用 -i 选项会直接修改原文件,建议在操作前备份文件。

  1. 使用不同的分隔符

如果替换内容中包含 /,可以使用其他字符作为分隔符,比如 #

bash 复制代码
sed 's#要替换的内容#替换后的内容#g' 输入文件

总结

sed 是一个强大的文本处理工具,通过掌握其替换命令的语法和使用方法,可以高效地完成各种文本替换任务。




7️⃣ 参考 7

使用sed命令进行文本替换的完整指南

一、基本语法与核心功能

sed(流编辑器)通过正则表达式匹配实现文本替换,其核心命令为s替换操作,基本格式为:
s e d ′ s / 正则表达式 / 替换内容 / 标 志 ′ 文件名 sed 's/正则表达式/替换内容/标志' 文件名 sed′s/正则表达式/替换内容/标志′文件名

其中:

  • 正则表达式 :定义需要匹配的文本模式,例如old_string
  • 替换内容 :替换后的新文本,如new_string
  • 标志 :控制替换行为,如g(全局替换)、i(忽略大小写)
二、关键操作示例
  1. 基础全局替换

    bash 复制代码
    sed 's/cat/dog/g' input.txt

    将所有cat替换为dogg标志确保每行多次替换)

  2. 行首/行尾定位

    bash 复制代码
    sed 's/^START://' config.ini  # 删除行首的"START:"
    sed 's/\.$//' text.log       # 删除行尾的句号
  3. 正则表达式进阶

    bash 复制代码
    sed -r 's/([0-9]{3})-([0-9]{4})/\1****/g' data.csv

    将电话号码123-4567替换为123****(使用扩展正则表达式-r和捕获组)

  4. 变量动态替换(Shell脚本)

    bash 复制代码
    key="username"
    value="admin"
    sed -i "s/\($key\": \"\).*/\1$value\"/" config.json

    修改JSON配置文件中指定键的值

三、关键注意事项
  1. 文件直接修改

    添加-i选项直接修改源文件(建议先测试无-i的命令):

    bash 复制代码
    sed -i.bak 's/error/warning/g' server.log  # 自动创建.bak备份
  2. 特殊字符转义

    bash 复制代码
    sed 's/\//\\/g' paths.txt     # 替换"/"为"\\"
    sed 's/&/\&/g' html.txt  # 处理HTML实体
  3. 多条件组合操作

    bash 复制代码
    sed -e 's/foo/bar/g' -e '/^#/d' script.sh

    同时执行替换和删除注释行

四、典型应用场景
  1. 日志文件清洗

    bash 复制代码
    sed -E '/ERROR|WARN/d' app.log > clean.log
  2. 批量重命名文件

    bash 复制代码
    ls *.jpg | sed 's/^2020/ARCHIVE_2020/' | xargs -I{} mv {} 
  3. 代码版本更新

    bash 复制代码
    sed -i '/version:/s/1.2.3/2.0.0/' package.yaml



8️⃣ 参考 8

sed 是 Linux/Unix 系统中用于流式文本替换的核心工具,支持正则表达式和多种编辑操作。以下是其核心用法及常见场景的详解:


一、基础替换语法

  1. 基本格式

    bash 复制代码
    sed 's/原字符串/新字符串/' 文件名

    s 表示替换操作,默认仅替换每行的首个匹配项。

    • 示例:将文件中的首个 apple 替换为 orange

    bash 复制代码
    sed 's/apple/orange/' file.txt
  2. 全局替换

    添加 g 标志以替换所有匹配项:

    bash 复制代码
    sed 's/apple/orange/g' file.txt

    若需结合行号限制替换范围(如仅第3行):

    bash 复制代码
    sed '3s/apple/orange/g' file.txt
  3. 直接修改文件

    使用 -i 选项直接保存修改(谨慎操作,建议先备份):

    bash 复制代码
    sed -i 's/apple/orange/g' file.txt

二、高级替换技巧

  1. 处理特殊字符

    若替换内容包含 /,可改用其他分隔符(如 #|):

    bash 复制代码
    sed 's#/old/path#/new/path#' file.txt
  2. 正则表达式应用

    • 替换所有数字为 #

    bash 复制代码
    sed 's/[0-9]/#/g' file.txt

    • 匿名化 IP 地址(隐藏最后一段):

    bash 复制代码
    sed -E 's/([0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+)/\1.xxx/g' log.txt
  3. 捕获组与反向引用

    使用 \(...\) 捕获组并通过 \1 引用:

    bash 复制代码
    sed 's/\(love\)able/\1rs/g' file.txt  # loveable → lovers
  4. 多命令执行

    -e 或分号分隔多个命令:

    bash 复制代码
    sed -e '1,5d' -e 's/error/warning/g' log.txt  # 先删1-5行,再替换error

三、常见场景示例

  1. 删除注释与空行

    bash 复制代码
    sed -i '/^#/d; /^$/d' script.sh  # 删除以`#`开头的行和空行
  2. 批量替换多个文件

    bash 复制代码
    sed -i 's/http:\/\/old.com/https:\/\/new.com/g' *.html  # 替换所有HTML文件中的域名
  3. 指定行范围替换

    bash 复制代码
    sed '5,10s/error/warning/g' log.txt  # 仅替换5-10行的error
  4. 插入/追加文本

    • 在第2行前插入文本:

    bash 复制代码
    sed '2i\插入内容' file.txt

    • 在匹配行后追加:

    bash 复制代码
    sed '/pattern/a\追加内容' file.txt

四、注意事项

  1. 备份文件

    使用 -i.bak 生成备份文件(如 file.txt.bak):

    bash 复制代码
    sed -i.bak 's/apple/orange/g' file.txt
  2. 转义特殊字符

    如替换内容包含 &\,需用 \ 转义:

    bash 复制代码
    sed 's/path/\/usr\/local\//g' file.txt  # 替换为含`/`的路径
  3. 大小写不敏感

    添加 I 标志以忽略大小写:

    bash 复制代码
    sed 's/apple/orange/Ig' file.txt  # 匹配Apple、APPLE等

通过灵活组合这些命令,sed 可高效完成日志处理、配置修改等复杂任务。更多高级用法(如多行文本处理、标签跳转)可参考 。




9️⃣ 参考 9

使用 sed 进行文本替换是其最常见的应用之一。以下是关于如何使用 sed 命令进行文本替换的详细说明和示例:

基本替换语法

bash 复制代码
sed 's/模式/替换内容/' 文件
  • s:表示替换操作(substitute)。
  • /模式/:指定要匹配的模式(可以使用正则表达式)。
  • /替换内容/:指定用于替换的新内容。
  • 默认情况下,sed 只替换每行中第一次出现的目标模式。

示例

  1. 将每行中的第一个 "apple" 替换为 "banana"

    bash 复制代码
    sed 's/apple/banana/' 文件.txt

    说明:只替换每行中第一次出现的 "apple"。

  2. 将每行中所有的 "apple" 替换为 "banana"

    bash 复制代码
    sed 's/apple/banana/g' 文件.txt

    说明g 标志表示全局替换,即替换每行中所有出现的 "apple"。

  3. 替换时区分大小写

    默认情况下,sed 是区分大小写的。如果需要忽略大小写,可以使用 I 标志(在 GNU sed 中支持)。

    bash 复制代码
    sed 's/apple/banana/Ig' 文件.txt
  4. 仅替换特定行

    可以指定要替换的行范围或特定行。例如,仅替换第2行中的 "apple":

    bash 复制代码
    sed '2s/apple/banana/' 文件.txt

    或者,替换第2到第4行中的 "apple":

    bash 复制代码
    sed '2,4s/apple/banana/g' 文件.txt
  5. 在匹配模式前后添加内容

    例如,在每个 "apple" 前后添加括号:

    bash 复制代码
    sed 's/apple/(&)/g' 文件.txt

    说明& 代表匹配到的整个模式。

  6. 使用不同的分隔符

    当模式或替换内容中包含 / 时,可以使用其他分隔符(如 |)以避免转义。

    bash 复制代码
    sed 's|/home/user|/var/www|g' 文件.txt

高级替换示例

  1. 删除行尾的空格

    bash 复制代码
    sed 's/[ \t]*$//' 文件.txt

    说明:匹配行尾的所有空格和制表符,并将其替换为空。

  2. 替换包含特殊字符的模式

    例如,将 "price=100" 替换为 "price=200":

    bash 复制代码
    sed 's/price=100/price=200/' 文件.txt
  3. 使用变量进行替换

    可以结合 Shell 变量进行动态替换:

    bash 复制代码
    var="banana"
    sed "s/apple/$var/g" 文件.txt
  4. 在替换时保留部分匹配内容

    例如,将 "color:red" 替换为 "color=#FF0000":

    bash 复制代码
    sed 's/color=red/color=#FF0000/' 文件.txt

直接修改文件

使用 -i 选项可以直接在文件中进行替换,而无需输出到新文件:

bash 复制代码
sed -i 's/old/new/g' 文件.txt

注意:直接修改文件前,建议先备份:

bash 复制代码
sed -i.bak 's/old/new/g' 文件.txt

这将在修改文件前创建一个名为 文件.txt.bak 的备份。

总结

sed 提供了灵活且强大的文本替换功能,适用于各种复杂的文本处理需求。通过掌握其基本语法和高级用法,可以高效地进行批量文本编辑。建议在实际使用中结合具体需求进行练习,以加深理解。




🔟 参考 10

sed 是 Linux/Unix 系统中强大的流式文本编辑工具,支持通过命令行快速实现文本替换、删除、插入等操作。以下是关于 sed 替换文本的核心指南:


一、基本替换语法

bash 复制代码
sed 's/旧内容/新内容/' 文件名
  • s 表示替换(substitute)

  • // 之间的内容为定界符,可自定义(如 s:old:new:

  • 示例 :将文件中所有 foo 替换为 bar

    bash 复制代码
    sed 's/foo/bar/g' file.txt
    • g 表示全局替换(每行所有匹配项)

二、关键参数与扩展用法

  1. 直接修改文件

    bash 复制代码
    sed -i 's/old/new/g' file.txt  # 原地修改文件
    • -i 会直接修改原文件,建议提前备份!
  2. 仅替换特定行

    bash 复制代码
    sed '3s/foo/bar/' file.txt  # 仅替换第3行的 foo
    • 可指定行号或行范围(如 2,5s/.../
  3. 支持正则表达式

    • 模糊匹配sed 's/fo+/fum/g'fo, foo, foooo 等替换为 fum
    • 行首/行尾^start 匹配行首,end$ 匹配行尾
  4. 多条件替换

    bash 复制代码
    sed -e 's/foo/bar/g' -e 's/test/demo/g' file.txt
    • -e 或分号 ; 分隔多条命令

三、高级技巧

  1. 分组与引用

    捕获括号内的内容并用 \1, \2 引用:

    bash 复制代码
    sed 's/\([a-z]\)_\1/\U&/g' file.txt  # 将 "a_a" 转为大写 "A_A"
  2. 忽略大小写替换

    bash 复制代码
    sed 's/hello/HELLO/gI' file.txt  # I 表示忽略大小写
  3. 处理特殊字符

    • 如果内容包含 /,改用其他定界符(如 #):

      bash 复制代码
      sed 's#/path/to/file#/mnt/data#g' file.txt
  4. 结合其他命令

    • 配合 grep 筛选后替换:

      bash 复制代码
      grep "ERROR" log.txt | sed 's/ERROR/WARNING/g'

四、实际应用案例

  1. 批量替换目录下所有文件

    bash 复制代码
    find . -type f -name "*.log" | xargs sed -i 's/old/new/g'
  2. 替换并保留原始文件

    bash 复制代码
    cp file.txt file.bak && sed -i 's/old/new/g' file.txt
  3. 删除空行

    bash 复制代码
    sed '/^$/d' file.txt  # 删除所有空行

五、注意事项

  • 备份重要文件 :使用 -i 前务必备份原文件。
  • 测试先行 :先用 sed 'command' file.txt 查看效果,再执行修改。
  • 区分 sedawk :复杂逻辑处理推荐 awk,简单替换首选 sed

掌握以上技巧后,你可以通过组合命令解决大多数文本替换需求。更多细节可通过 man sed 或在线文档深入学习。




一、基础替换语法

1. 单次替换
bash 复制代码
sed 's/old/new/' file.txt
  • 说明 :仅替换每行中第一个匹配项

  • 示例 :将 apple 替换为 orange(仅首词替换):

    bash 复制代码
    sed 's/apple/orange/' fruits.txt
2. 全局替换
bash 复制代码
sed 's/old/new/g' file.txt
  • 说明 :替换每行中所有匹配项g 表示全局)。

  • 示例 :将所有 apple 替换为 orange

    bash 复制代码
    sed 's/apple/orange/g' fruits.txt

二、关键功能与技巧

1. 直接修改文件
bash 复制代码
sed -i 's/old/new/g' file.txt
  • 说明-i 选项直接修改原文件(慎用,建议备份:-i.bak)。

  • 示例 :备份原文件并替换:

    bash 复制代码
    sed -i.bak 's/apple/orange/g' fruits.txt
2. 指定行范围替换
  • 单行3s/old/new/g(仅第3行)。
  • 行区间5,10s/old/new/g(第5-10行)。
  • 模式匹配行/pattern/s/old/new/g(匹配含 pattern 的行)。
3. 处理特殊字符
  • 分隔符替换 :若替换内容含 /,改用 #@

    bash 复制代码
    sed 's#/usr/bin#opt/bin#g' path.txt
  • 转义字符 :用 \ 转义特殊符号(如 .*):

    bash 复制代码
    sed 's/\./,/g' file.txt  # 替换所有 `.` 为 `,`

三、高级替换场景

1. 捕获组与反向引用
bash 复制代码
sed 's/\(old\)/\1_\2/g' file.txt
  • 说明 :用 () 捕获组,\1 引用内容。

  • 示例 :在 old 后添加下划线:

    bash 复制代码
    sed 's/\(old\)/\1_/g' text.txt
2. 忽略大小写替换
bash 复制代码
sed 's/apple/orange/I' file.txt
  • 说明I 标志忽略大小写(如替换 AppleAPPLE)。
3. 多条件替换
  • 同时替换多个模式

    bash 复制代码
    sed -e 's/apple/orange/g' -e 's/banana/grape/g' file.txt
  • 使用正则表达式

    bash 复制代码
    sed -E 's/(apple|banana)/fruit/g' file.txt  # 替换 apple/banana 为 fruit

四、实战案例

1. 批量修改配置文件
bash 复制代码
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/hosts
  • 场景:将本地回环地址改为通配符地址。
2. 匿名化日志中的 IP
bash 复制代码
sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/XXX.XXX.XXX.XXX/g' access.log
  • 场景:隐藏日志中的真实 IP。
3. 调整日期格式
bash 复制代码
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' dates.txt
  • 场景 :将 YYYY-MM-DD 转为 DD/MM/YYYY

五、注意事项

  1. 备份原文件 :使用 -i.bak 避免误操作。
  2. 性能优化 :处理大文件时,可结合 --unbuffered 减少内存占用。
  3. 正则表达式 :默认使用基础正则,复杂模式需加 -E-r

通过灵活组合地址范围、正则表达式和替换标志,sed 可高效完成从简单替换到复杂文本重构的任务。







相关推荐
林木木木木木木木木木31 分钟前
【随身WiFi】随身WiFi Debian系统优化教程
linux·运维·debian·随身wifi
a东方青1 小时前
vue3学习笔记之属性绑定
vue.js·笔记·学习
临观_1 小时前
打靶日记 zico2: 1
linux·网络安全
嵌入式DZC1 小时前
MCGS昆仑通太屏笔记
笔记
痆古酊旳琲伤1 小时前
Linux驱动开发1 - Platform设备
linux·驱动开发
周Echo周1 小时前
16、堆基础知识点和priority_queue的模拟实现
java·linux·c语言·开发语言·c++·后端·算法
豆豆1 小时前
day28 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
下雨的清晨2 小时前
计算机网络期中复习笔记(自用)
笔记·计算机网络·课程设计
零点零一2 小时前
在Ubuntu系统中安装和升级RabbitVCS
linux·运维·ubuntu
宇希啊2 小时前
C语言多进程素数计算
linux·c语言