2013-05-05 112 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