如何使用grep从不同长度的URL中提取指定格式的文件ID
解决方案
你可以使用grep的正则匹配能力提取目标文件ID,以下是适配不同环境的实现方法:
方法1:GNU grep 适用(大部分Linux发行版默认携带)
直接使用PCRE环视语法精准匹配,命令如下:
grep -Po '(?<=/)[a-z0-9_-]+(?=/)' foo.txt
参数说明:
-P:启用Perl兼容正则规则,支持环视语法-o:仅输出匹配到的片段,不输出整行内容
正则逻辑:
(?<=/):限定匹配内容的前一个字符必须是/,不会将/计入匹配结果[a-z0-9_-]+:匹配由小写字母、数字、下划线、短横线组成的连续内容,和你给出的文件ID特征完全吻合(?=/):限定匹配内容的后一个字符必须是/,不会将/计入匹配结果
方法2:兼容POSIX grep 适用(比如macOS默认grep)
如果你的环境不支持-P参数,可以用两段grep组合实现相同效果:
grep -Eo '/[a-z0-9_-]+/' foo.txt | grep -Eo '[^/]+'
逻辑说明:
第一段grep先匹配出前后带/的符合特征的片段,第二段grep过滤掉所有/,剩下的就是目标文件ID。
如果你的文件ID有更特殊的规则(比如固定长度、必须同时包含下划线和短横线),可以调整正则规则进一步缩小匹配范围,以上命令已可以完全匹配你给出的示例输入得到期望输出。
内容的提问来源于stack exchange,提问作者the_alpaca
相关产品推荐
相关产品推荐

