嘟嘟社区

大佬们,这个shell怎么写,一行命令写出来,可以用sed


convert https://www.baidu.com/aaa/bbb/ccc/xxx.zip to www-baidu-com-aaa-bbb-ccc-xxx

要兼容 schema 是 http 的情况,即

也要把 http://www.baidu.com/aaa/bbb/ccc/xxx.zip 转化成 www-baidu-com-aaa-bbb-ccc-xxx

要啥sed,shell内置功能就可以
  1. parse () { : "${1#*://}"; : "${_////-}"; : "${_//./-}"; echo "${_%-*}"; }

复制代码

  1. $ parse ‘http://www.baidu.com/aaa/bbb/ccc/xxx.zip’
  2. www-baidu-com-aaa-bbb-ccc-xxx
  3. $ parse ‘https://www.baidu.com/aaa/bbb/ccc/xxx.zip’
  4. www-baidu-com-aaa-bbb-ccc-xxx

复制代码

sed 对正则表达式的支持不全,尝试了几十分钟都没有写对,求助大佬们。

好难~
@iks 一样什么都想用正则搞
  1. echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | awk -F"//" ‘{print $2}’ | sed  "s///-/g" | sed "s/./-/g"

复制代码

这样写出来了,但这样实现与我的初衷有点违背,我希望一次 sed 就能拿到值

fg9907 发表于 2022-9-21 21:12
这样写出来了,但这样实现与我的初衷有点违背,我希望一次 sed 就能拿到值

强迫症吗

好吧  

  1. $ echo "https://www.baidu.com/aaa/bbb/ccc/xxx.zip" | awk -F"//" ‘{print $2}’ | sed  "s///-/g" | sed "s/./-/g" | sed "s/.zip//g"
  2. www-baidu-com-aaa-bbb-ccc-xxx

复制代码

echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | sed -e "s/https:////g" -e "s///-/g" -e "s/./-/g"
使用-e 匹配多个条件