全球主机交流论坛

标题: 大佬们,这个shell怎么写,一行命令写出来,可以用sed [打印本页]

作者: fg9907    时间: 2022-9-21 20:52
标题: 大佬们,这个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
作者: fg9907    时间: 2022-9-21 20:54
sed 对正则表达式的支持不全,尝试了几十分钟都没有写对,求助大佬们。
作者: IDC80HOST    时间: 2022-9-21 21:07

好难~
作者: HOH    时间: 2022-9-21 21:08
@iks 一样什么都想用正则搞
作者: fg9907    时间: 2022-9-21 21:12
  1. echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | awk -F"//" '{print $2}' | sed  "s/\//-/g" | sed "s/\./-/g"
复制代码




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


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

...

强迫症吗
作者: fg9907    时间: 2022-9-21 21:21
Bai. 发表于 2022-9-21 21:17
强迫症吗

好吧  
作者: fg9907    时间: 2022-9-21 21:22
  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
复制代码

作者: Bai.    时间: 2022-9-21 21:23
fg9907 发表于 2022-9-21 21:21
好吧

echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | sed -e "s/https:\/\///g" -e "s/\//-/g" -e "s/\./-/g"
使用-e 匹配多个条件
作者: Origami    时间: 2022-9-21 21:24
要啥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
复制代码

作者: fg9907    时间: 2022-9-21 21:29
Bai. 发表于 2022-9-21 21:23
echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | sed -e "s/https:\/\///g" -e "s/\//-/g" -e "s/\. ...

感谢,学习了!
作者: iks    时间: 2022-9-21 21:32
HOH 发表于 2022-9-21 21:08
跟@iks 一样什么都想用正则搞


你懂什么,我用正则替换你家的丧葬费发
作者: fg9907    时间: 2022-9-21 21:32
Origami 发表于 2022-9-21 21:24
要啥sed,shell内置功能就可以

大佬,牛!学习一下,十分感谢
作者: ggeeii    时间: 2022-9-21 21:42
Origami 发表于 2022-9-21 21:24
要啥sed,shell内置功能就可以

大神这是啥用法?
作者: Origami    时间: 2022-9-21 21:49
ggeeii 发表于 2022-9-21 21:42
大神这是啥用法?

https://github.com/A-BenMao/pure-bash-bible-zh_CN
作者: gajiodgaj    时间: 2022-9-21 21:57
技术贴帮顶
作者: caizi    时间: 2022-9-21 22:01
fg9907 发表于 2022-9-21 20:54
sed 对正则表达式的支持不全,尝试了几十分钟都没有写对,求助大佬们。

不是不全,是你格式没用对。
作者: fg9907    时间: 2022-9-21 22:09
caizi 发表于 2022-9-21 22:01
不是不全,是你格式没用对。

那有可能,有些字符是否需要转义可能搞错了
作者: fg9907    时间: 2022-9-21 22:13
Bai. 发表于 2022-9-21 21:23
echo "https://www.baidu.com/aaa/bbb/ccc/xxx.iso" | sed -e "s/https:\/\///g" -e "s/\//-/g" -e "s/\. ...

若要兼容 http:// 这怎么写好呢?
作者: Bai.    时间: 2022-9-21 22:18
fg9907 发表于 2022-9-21 22:13
若要兼容 http:// 这怎么写好呢?

再加个 -e 或者通配符
主要这个方便修改 一眼就能明白
作者: fg9907    时间: 2022-9-21 22:23
Bai. 发表于 2022-9-21 22:18
再加个 -e 或者通配符
主要这个方便修改 一眼就能明白

哦哦 确实是

-e "s/http:\/\///g"

如果没有匹配到 http:// 那么就不会替换什么,谢谢指导
作者: hxhui    时间: 2022-9-21 23:46
正则




欢迎光临 全球主机交流论坛 (https://hostloc.gdisk.cf/) Powered by Discuz! X3.4