2016-12-03 11 views
0

裏面有一個bash腳本和一個變量mystring。 在運行結束時,mystring看起來像這樣:/dir1/dir2 /dir1/dir5/dir6 /dir1/dir9/dir20/dir99 ...這基本上是一個用空格分隔的不同路徑的字符串。從腳本里面的字符串中找出最長的路徑

我需要返回字符串內最長路徑的深度。現在我有一個方向,但我堅持:

我試圖插入該給我的腳本:

cat $mystring | tr ' ' '\n' | sed 's/[^/]*//g' | # now print length of longest string 

它不承認,我試圖用$mystring內容的工作,和我也不知道該怎麼做最後的事情...幫助?

+1

回聲MyString的,而不是貓 –

回答

0

這裏就是你要尋找的最後一個命令:

wc -L 

-L,--max線長度:打印出來的最大顯示寬度

您也可以凝結trsed使用

for i in $mystring; do echo $i | tr -cd /\\n; done | wc -L 

這種工作方式如下:負載每次刪除$mystring的一個組件,除去/或換行符之外的所有內容,然後將其提供給上述其他工作。

順便說一下,可以保證沒有路徑會包含空間嗎?

0

如果你打開了徒勞無功的解決方案:

printf "a/b/c/d/e/f a a/b a/b/c a/b/c/d" | 
    gawk -vFS="/" -vRS='\\s+' '{if (NF>f) f=NF;} END {print f;}' 

打印:

6 

FS是字段分隔符(如斜線)。 RS是記錄分隔符(如空格)。 NF是給定記錄中的字段數(如a/b/c)。

+0

爲什麼downvoted?它沒有工作? – blackpen

0

你應該使用數組目錄,以避免空間問題,在路徑
你可以使用$ {#VAR}字符串的長度

DIRS=("/tmp" "/tmp1" "/tmp/xx xxx/x1") 
MAXLENGTH=0 
for LENGTH in "${DIRS[@]}" 
do 
    if [ "$MAXLENGTH" -lt "${#LENGTH}" ] 
    then 
     MAXLENGTH="${#LENGTH}" 
    fi 
done 
echo $MAXLENGTH