如何使用sed提取第4个与第5个/之间的目标文本?
sed提取路径中第4个与第5个斜杠间的文本
直接用sed的正则替换就能搞定,给你两个实用的写法:
写法一(基础转义版)
执行这条命令:
echo "/text1/text2/text3/wanted_text/text5/text6" | sed 's/^\/[^\/]*\/[^\/]*\/[^\/]*\/\([^\/]*\)\/.*$/\1/'
原理拆解:
^\/[^\/]*匹配开头的斜杠加第一个路径段(比如/text1)- 重复三次这个结构,就精准定位到
/text1/text2/text3/这部分 \([^\/]*\)用捕获组把第4个斜杠后、第5个斜杠前的内容(也就是wanted_text)抓出来- 最后用
\1替换整个字符串,只保留捕获组里的目标内容
写法二(简化分隔符版)
如果觉得转义斜杠麻烦,可以换个分隔符(比如|),更易读:
echo "/text1/text2/text3/wanted_text/text5/text6" | sed -E 's|^/[^/]*/[^/]*/[^/]*/([^/]*)/.*$|\1|'
这里加了-E启用扩展正则,捕获组不用加额外反斜杠,写法更清爽。
执行任意一条命令,输出都是wanted_text。
内容的提问来源于stack exchange,提问作者ZakS
相关产品推荐
相关产品推荐

