用sedreplace第n个模式直到行结束

例如:

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

在第六次出现“/”之后需要删除,包括:

 /some/long/path/we/need 

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

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

清洁解决scheme非常感谢!

输入

 /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 

这可能适用于你(GNU sed):

 sed 's/\/[^\/]*//6g' file 

AWK:

 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