ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sed 标签功能,可以循环

sed 标签功能,可以循环

原创 Linux操作系统 作者:czxin788 时间:2024-06-19 15:18:34 0 删除 编辑

echo 525410dcc710 | sed -r ':loop;s/([^-]+)([0-9a-f]{2})/\1-\2/;t loop'
输出结果
52-54-10-dc-c7-10


解释:

-r 参数使得 sed 使用扩展的正则表达式语法。

:loop 定义了一个标签 loop,用于后续的循环。

s/([^-]+)([0-9a-f]{2})/\1-\2/ 是 sed 的替换命令:

([^-]+) 匹配一个或多个非连字符(非 -)的字符,并将其捕获为第一组 \1。

([0-9a-f]{2}) 匹配两个十六进制数字字符,并将其捕获为第二组 \2。

\1-\2 将匹配到的内容替换为第一组内容 \1,后跟一个连字符 -,再跟第二组内容 \2。

t loop 命令在替换成功时跳转到标签 loop,从而实现循环处理直到没有匹配项为止。


下面开始解释执行过程:

第一次执行替换:

初始字符串为 525410dcc710。

第一次执行替换:

([^-]+): 匹配 525410dcc710, \1=525410dcc710,贪婪匹配

([0-9a-f]{2}): 没有匹配上任何东西,于是会回溯\1=525410dcc710,使得([0-9a-f]{2})匹配上了10,([^-]+)匹配变为525410dcc7

最终匹配结果为\1=525410dcc7  \2=10

通过s命令525410dcc710被替后的结果为 525410dcc7-10。


第二次执行替换:

现在字符串变为 525410dcc7-10

([^-]+): 匹配 525410dcc7, \1=525410dcc7,贪婪匹配

([0-9a-f]{2}): 没有匹配上任何东西,因为525410dcc7后面是短横线-,于是会回溯\1=525410dcc7,使得([0-9a-f]{2})匹配上了c7,([^-]+)匹配变为 525410dc

最终匹配结果为\1=525410dc  \2=c7

通过s命令525410dcc7-10被替后的结果为 525410dc-c7-10。


于是经过上述几轮替换,最终结果变为52-54-10-dc-c7-10


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-3019384/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: apollo部署文档
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-06-03

  • 博文量
    233
  • 访问量
    858398