我想替换网址中的所有斜线。
示例地址:https://example.com/sub/folder/files/file.txt
预期结果:example.com-子文件夹-文件-文件.txt
我可以删除 https 但似乎无法用以下方式替换剩余的斜线:
echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')
以上仅给我这个:
example.com/sub/folder/files/file.txt
添加第二个 sed 来替换斜线只会删除遇到的第一个斜线。我做错了什么?
答案1
尝试这个:
echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'
结果是:www.example.com-sub-folder-files-file.txt
它只替换“第一个遇到的”的原因是因为您缺少 g 作为传递给 sed 的最后一个“参数”,它代表全局,将用所需的替换替换找到的所有实例,如果没有它,它将只替换找到的第一个实例。
还值得注意的是,你可以用任何符号分隔 sed 命令的参数,它不需要是 '/',我更喜欢使用不参与搜索和替换的符号,因为它可以为你节省一些转义字符的过度思考,以及替换 / 时的潜在错误。
另外,您可以使用 -e 选项在 sed 中将几个命令串在一起,如上所示,我将“https://”替换为空(删除它),然后将所有“/”替换为“-”。很简单,很简单。
希望对您有帮助
答案2
你不需要双倍echo
。
我不明白你的意思添加第二个 sed 来替换斜杠只会删除遇到的第一个斜杠。sed
-您的示例中只有一个命令。您可以使用sed
以下两个命令轻松完成您想要的操作:
echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'