如果你想删除一定数量的路径组件,你应该使用cut
with -d'/'
。例如,如果path=/home/dude/some/deepish/dir
:
要删除前两个组件:
# (Add 2 to the number of components to remove to get the value to pass to -f)
echo $path | cut -d'/' -f4-
# output:
# some/deepish/dir
要保留前两个组件:
echo $path | cut -d'/' -f-3
# output:
# /home/dude
要删除最后两个组件(rev
反转字符串):
echo $path | rev | cut -d'/' -f4- | rev
# output:
# /home/dude/some
要保留最后三个组件:
echo $path | rev | cut -d'/' -f-3 | rev
# output:
# some/deepish/dir
或者,如果您想在特定组件之前删除所有内容,则sed
可以:
echo $path | sed 's/.*\(some\)/\1/g'
# output:
# some/deepish/dir
或在特定组件之后:
echo $path | sed 's/\(dude\).*/\1/g'
# output:
# /home/dude
如果您不想保留您指定的组件,那就更容易了:
echo $path | sed 's/some.*//g'
# output:
# /home/dude/
如果你想保持一致,你也可以匹配尾部斜杠:
echo $path | sed 's/\/some.*//g'
# output:
# /home/dude
当然,如果你匹配多个斜线,你应该切换sed
分隔符:
echo $path | sed 's!/some.*!!g'
# output:
# /home/dude
请注意,这些示例都使用绝对路径,您必须尝试使它们与相对路径一起使用。