2013-05-05 93 views
2

例如:替换的sed

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

需要的“/”,6号发生后删除,包括本身:

/some/long/path/we/need 

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

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

清洁解决方案非常感谢!

回答

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 
+0

对于awk,使用内置变量来修改输出,而不是依赖于其他。 'echo'/ some/long/path/we/need/to/shorten'| awk -v j = 6'BEGIN {RS =“/”; ORS =“/”} {if(i abasu 2013-05-05 10:51:02

+2

+1附近。如果我是你,我会删除awk + ​​tr + sed解决方案。 – 2013-05-06 00:43:03

3

这可能会为你工作(GNU SED):

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

为什么不使用不同的分隔符并将其简化为'sed's#/ [^ /] * ## 6g'' – 2013-05-05 11:59:24

+0

感谢sed解决方案! – user1612686 2013-05-06 06:54:51

2

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