2

例如:

/some/long/path/we/need/to/shorten

需要在第 6 次出现 '/' 后删除,包括它自己:

/some/long/path/we/need

使用 sed 我想出了这个解决方案,但它是一种解决方法:

path=/some/long/path/we/need/to/shorten
slashesToKeep=5
n=2+slashesToKeep
echo $path | sed "s/[^/]*//$n;s/\/\/.*//g"

非常感谢更清洁的解决方案!

4

3 回答 3

5

输入

/some/long/path/we/need/to/shorten

代码

切割解决方案

echo '/some/long/path/we/need/to/shorten' | cut -d '/' -f 1-6

AWK 解决方案

echo '/some/long/path/we/need/to/shorten' | awk -F '/'  '{ for(i=1; i<=6; i++) {print $i} }' | tr '\n' '/'|sed 's/.$//'

输出

/some/long/path/we/need
于 2013-05-05T08:58:34.663 回答
4

这可能对您有用(GNU sed):

sed 's/\/[^\/]*//6g' file
于 2013-05-05T11:00:52.787 回答
2

呸:

awk -F'/' 'BEGIN{OFS=FS}{NF=6}1'

在行动:

$ echo /some/long/path/we/need/to/shorten | awk -F'/' 'BEGIN{OFS=FS}{NF=6}1' 
/some/long/path/we/need
于 2013-05-05T12:03:36.647 回答