替换 URL 中的斜杠

替换 URL 中的斜杠

我想替换网址中的所有斜线。

示例地址: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'

相关内容