求能替换除.yaml后缀外所有点为斜杠的POSIX正则表达式
符合POSIX标准的正则替换方案
方法1:使用POSIX BRE(sed默认模式)
通过两步替换实现需求:先全局替换所有.为/,再将末尾的/yaml还原为.yaml,命令如下:
echo "adsdasd.sdfdsfsdf.f43fvev.ASCSDF.sfgsdfssdf.yaml" | sed 's/\./\//g;s/\/yaml$/.yaml/'
- 第一步
s/\./\//g:将字符串中所有.替换为/ - 第二步
s/\/yaml$/.yaml/:匹配字符串末尾的/yaml,替换回.yaml
方法2:使用POSIX兼容的awk命令
利用分隔符拆分字符串,替换前半部分的.后再拼接后缀:
echo "adsdasd.sdfdsfsdf.f43fvev.ASCSDF.sfgsdfssdf.yaml" | awk -F'.yaml' '{gsub(/\./, "/", $1); print $1 ".yaml"}'
-F'.yaml':以.yaml作为分隔符,将字符串拆分为两部分gsub(/\./, "/", $1):对第一部分内容全局替换.为/print $1 ".yaml":将处理后的前半部分与.yaml后缀拼接输出
以上两种方案均完全符合POSIX标准,可在任何支持POSIX工具链的环境中运行。
内容的提问来源于stack exchange,提问作者PsySkeletor
相关产品推荐
相关产品推荐

