假设我有两条路。 Path1 是静态的,path2 是动态的。
例子:
- 路径1= /tmp/文件夹/
- 路径2= /tmp/文件夹/dir1/dir1_2
结果:
- 差异= /dir/dir1_2
我想实现如上面的例子。
答案1
使用 GNU realpath
,您可以执行以下操作:
$ Path1=/tmp/folder
$ Path2=/tmp/folder/dir1/dir1_2
$ realpath -m --relative-to="$Path1" -- "$Path2"
dir1/dir1_2
在 POSIX/Korn 类 shell(例如 bash)中,使用以下命令存储在变量中:
Diff=$(realpath -m --relative-to="$Path1" -- "$Path2")
通常需要注意的是,如果生成的路径以换行符结尾,它将无法正常工作。
具有zsh
或非交互式bash -O lastpipe
:
realpath -zm --relative-to="$Path1" -- "$Path2" |
IFS= read -rd '' Diff
可以代替使用。
答案2
如果您只是想从一个字符串中减去另一个字符串,那么您可以将较长的字符串通过管道传输到 sed 命令中以删除较短的子字符串:
$ echo $Path2 | sed "s,$Path1,,g"
dir1/dir1_2
sed 需要使用双引号。另外,由于两个字符串中都有 / 字符,因此您需要将 sed 的默认分隔符更改为其他内容,这里我们使用逗号代替。