输入:
- 基本网址:
www.example.com/1/2/index.php
- 相对网址:
../../index.php
输出:
- 绝对网址:
www.example.com/index.php
如果使用 sed 就完美了。
据我了解,此正则表达式应为 URL 中的每个 ../
删除一个 somefolder/
。
最佳答案
realpath
是一种快速但有点笨拙的方式来做你想做的事。
(实际上,令我惊讶的是它没有正确处理 URL;它将它们视为普通的旧文件系统路径。)
~$ realpath -m http://www.example.com/1/2/../../index.php
=>
~$/home/username/http:/www.example.com/index.php
-m
(表示“缺失”)表示要解析路径,即使它的组件实际上并不存在于文件系统中。
因此,您仍然需要剥离其中的实际文件系统部分(即 $(pwd)
)。请注意,协议(protocol)的斜杠-斜杠也被规范化为单个斜杠。因此,您最好不要在输入中保留“http://”,而是将其添加到输出中。
有关完整故事,请参见 man 1 realpath
。或者 info coreutils 'realpath invocation'
如果您安装了信息系统,则可以获得更详细的完整故事。
关于regex - 将相对 URL 转换为绝对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618754/