linux中的sed命令

sed(Stream Editor)是 Linux 中强大的流式文本处理工具,主要用于对文本进行过滤、替换、删除、插入等操作。它逐行处理输入,默认输出到终端(不修改原文件),结合正则表达式可以实现复杂的文本处理任务。以下是 se 的常见用法和参数详解:


一、常用参数

参数 说明
-n 静默模式,仅输出处理过的行(需配合 -p 命令使用)
-e <脚本> 指定多个编辑命令(如 sed -e ‘s/foo/bar/’ -e ‘s/baz/qux/’)
-i [扩容名 ] 直接修改文件(危险!建议先备份):-i.back 修改前备份原始文件
-r 或 -E 启用扩展正则表达式(简化转义符,如 + () 无需转义)
-f <脚本文件> 从文件中读取 sed 命令

二、核心命令语法

1. 替换文本 s

sed 's/pattern/replacement/[flags]' file.txt
  • 示例
    # 替换每行第一个 "foo" 为 "bar"
    sed 's/foo/bar/' file.txt
    
    # 全局替换所有 "foo"(标志 `g`)
    sed 's/foo/bar/g' file.txt
    
    # 替换第2个匹配到的 "foo"
    sed 's/foo/bar/2' file.txt
    
    # 忽略大小写(标志 `i`,需结合 `-r` 使用)
    sed -r 's/foo/bar/gi' file.txt
    
    # 使用其他分隔符(如处理路径)
    sed 's#/old/path#/new/path#' file.txt

2. 删除行 d

# 删除包含 "pattern" 的行
sed '/pattern/d' file.txt

# 删除第3行
sed '3d' file.txt

# 删除3到5行
sed '3,5d' file.txt

# 删除空行
sed '/^$/d' file.txt

3. 打印特定行 p

# 配合 `-n` 仅打印匹配的行
sed -n '/pattern/p' file.txt    # 类似 grep
sed -n '3,5p' file.txt          # 打印3到5行

4. 插入/追加行 i,a

# 在匹配行前插入一行
sed '/pattern/i 插入的内容' file.txt

# 在匹配行后追加一行
sed '/pattern/a 追加的内容' file.txt

5. 替换行 c

# 将匹配的行替换为指定内容
sed '/pattern/c 新的内容' file.txt

6. 字符替换 y

# 类似 tr 命令,逐字符替换(如 a→x,b→y,c→z)
sed 'y/abc/xyz/' file.txt

三、高级用法

1. 多命令组合

# 通过分号分隔多个命令
sed 's/foo/bar/; s/baz/qux/' file.txt

# 或使用 -e 参数
sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt

2. 按行号或模式范围操作

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

# 从匹配 "start" 的行到匹配 "end" 的行删除
sed '/start/,/end/d' file.txt

3. 引用匹配内容 & 和分组 \1

# 将 "foo123" 替换为 "[foo123]"
sed 's/foo[0-9]\+/[&]/g' file.txt

# 使用分组提取内容(需转义括号 `$`)
sed 's/$foo$bar/\1baz/' file.txt    # "foobar" → "foobaz"

4. 修改原文件(谨慎!)

# 直接修改文件并备份原始内容为 .bak
sed -i.bak 's/foo/bar/g' file.txt

# 仅修改文件(无备份)
sed -i 's/foo/bar/g' file.txt

四、经典用例

1. 批量替换文件内容

sed -i 's/旧字符串/新字符串/g' *.txt

2. 删除注释行(以 # 开头)

sed -i '/^#/d' config.conf

3. 在特定行后插入内容

# 在 "INSERT_HERE" 行后插入内容
sed -i '/INSERT_HERE/a 新增内容' file.txt

4. 提取日志中的时间戳

cat log.txt | sed -n 's/.*$2023-[0-9]\{2\}-[0-9]\{2\}$.*/\1/p'

五、注意事项

  1. 备份文件:使用 -i 前务必确认操作,建议先不加 -i 测试命令。
  2. 平台差异:macOS 的 sed 与 Linux 可能有差异(如 -i 必须指定备份后缀)。
  3. 正则表达式:默认使用基础正则表达式,复杂场景可加 -r 或 -E  启用扩展语法。

掌握 sed 可大幅提升命令行文本处理效率!建议结合 man sed 手册深入学习。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容