【发布时间】:2017-05-04 22:32:33
【问题描述】:
想象一下这样的路径:
/a/b/c/d/e/...
... 可以是任意数量的更深层次,也就是说,我提前不知道是否会有 2、3 或 13 层次更深。
如何使用 FreeBSD shell,例如 /bin/sh,提取该路径的前“N”部分?例如,前 4 个级别,这样我会得到 /a/b/c/d?
【问题讨论】:
想象一下这样的路径:
/a/b/c/d/e/...
... 可以是任意数量的更深层次,也就是说,我提前不知道是否会有 2、3 或 13 层次更深。
如何使用 FreeBSD shell,例如 /bin/sh,提取该路径的前“N”部分?例如,前 4 个级别,这样我会得到 /a/b/c/d?
【问题讨论】:
你可以使用cut:
s='/a/b/c/d/e/f/g/h/i/j/k'
echo "$s" | cut -d/ -f1-5
/a/b/c/d
或者如果你使用BASH,那么你可以使用shell数组:
IFS=/ arr=($s)
然后从数组中打印所需的元素:
IFS=/ echo "${arr[*]:0:5}"
/a/b/c/d
【讨论】:
echo "$s" | cut -d/ -f1-5 也应该在 FreeBSD 上工作