当前位置: 首页 > article >正文

sed 命令\1 引用捕获组

 正则表达式中使用 (pattern) 定义分组,sed 会按顺序记录这些分组(最多支持9个,即 \1 到 \9)‌

# 将 "key:value" 替换为 "value:key"
echo "key:value" | sed -r 's/(.*):(.*)/\2:\1/'

将路径 /home/user/file.txt 替换为 /backup/user_file.txt 

echo "/home/user/file.txt" | sed -r 's#/([^/]+)/([^/]+)/#/backup/\1_\2/#'

正则表达式中的 ([^/]+) 可分解为以下部分:
‌1. 分组捕获 ( )‌
() 表示捕获分组,用于提取匹配内容,后续可通过 \1 引用该分组内容‌。
‌2. 字符类 [^/]‌
[] 定义字符集合,^ 表示否定,/ 是字面量斜杠。
组合 [^/] 表示匹配‌除斜杠 / 之外‌的任意单个字符‌。
‌3. 量词 +‌
+ 表示匹配前一个元素(即 [^/])‌一次或多次‌,确保捕获连续的非斜杠字符‌。
‌完整含义‌
([^/]+) 表示:
匹配一段‌连续的非斜杠字符‌(如 abc、123)。
将匹配结果保存到第一个分组中,便于后续提取或替

将日志 2023-08-15 ERROR: Failed to connect 调整为 [ERROR] 2023-08-15: Failed to connect

sed -r 's/([0-9-]+) ([A-Z]+): (.*)/[\2] \1: \3/' log.txt
 启用扩展正则‌
使用 -r 选项(GNU sed)或 -E 选项(BSD sed)以支持扩展正则语法,避免对 () 和 \1 转义‌

贪婪匹配问题

正则默认使用贪婪匹配(如 .* 会匹配到行末),可能导致分组捕获不符合预期。可用 .*? 或限定符优化‌  

特殊字符转义
若替换内容包含 /,建议使用其他分隔符(如 # 或 @)以避免冲突:

sed -r 's#/usr/local#/opt#g' config.txt
 


http://www.kler.cn/a/584041.html

相关文章:

  • 面试基础--JVM 优化
  • 【GPT入门】第19课 Langchain IO模型
  • jenkins+robotFramework持续集成(三)之jenkins参数
  • Linux zgrep 命令使用详解
  • GPU加速的国密SM2算法实现
  • Android 14 昼夜色切换多屏时候非主屏的Activity无法收到onConfigurationChanged
  • 双指针算法介绍+算法练习(2025)
  • Anaconda 以及 Jupyter Notebook的详细安装教程
  • 独立IP服务器的好处都有哪些?
  • Android头像布局
  • Node.js 模块化概念详细介绍
  • 【微知】tmux如何在一个会话的1个窗口中水平分割或者垂直分割窗口?(垂直 Ctrl + b, %; 切换Ctrl + b, 方向键; ctrl d关闭)
  • 当AI回答问题时,它的“大脑”里在炒什么菜?
  • PrivHunterAI越权漏洞检测工具详细使用教程
  • 从零开始学习机器人---如何高效学习机械原理
  • pycharm + anaconda + yolo11(ultralytics) 的视频流实时检测,保存推流简单实现
  • 程序化广告行业(11/89):洗牌期与成熟期的变革及行业生态解析
  • 深度学习-145-Text2SQL之基于官方提示词模板进行交互
  • 三分钟掌握音视频信息查询 | 在 Rust 中优雅地集成 FFmpeg
  • 平时作业