2013-04-29 98 views
1

我試圖列出當前目錄中文件的最大行長度,但我遇到了我的命令工作的麻煩。我相信這是在我的exec命令中跳過大括號{}的問題。經過搜索exec escape escape的搜索後,我無法找到任何關於如何在exec命令中跳過括號{}的任何內容。我錯過了什麼?如何打印目錄中每個文件的最長行號?

find . -iname *.page -exec awk '{if(length($0) > L) { LINE=$0;L = length($0)}} 
END {print LINE"|"L}' {}\; | sort 
+0

每個文件需要的'{}'和'\之間的空間;'。 – 2013-06-07 17:16:34

+0

是的,我的原創有很多問題,其中沒有一個涉及到轉義'{}','{}'和'\;'之間的空格。感謝您指出,我會更新最終答案,以便下一位用戶可以從您的評論中受益。 – 2013-06-07 17:33:26

回答

1

他們是原始命令的多個問題,其中沒有一個正在逃脫{}。第一個問題是需要在{}\;之間有一個空格。第二個問題涉及shell如何在查找參數*.page中擴展通配符。

Free BSD Forums

「*」是由前殼命令行被傳遞給發現(1)擴大。如果目錄中只有一個項目,那麼它就起作用了。如果 目錄中有多個項目,則由於 命令行選項不再正確而失敗。

將* .page換成引號可解決問題。最終版本是

find . -iname '*.page' -exec awk '{if(length($0) > L) 
{ LINE=NR;L = length($0)}} END {print L"|"FILENAME":"LINE}' {} \; | sort -n 

,其輸出的最長行的排序列表的行號

220|./Example1.page:157 
206|./Example2.page:203 
+0

這裏需要'sort -n' – Andelf 2017-02-16 09:53:48

1

你想在每個文件上運行awk,對嗎?在你的home目錄t.sh:

創建一個腳本

awk '{if(length($0) > L) { LINE=$0;L = length($0)}} 
END {print LINE"|"L}' "$1" 

命令行:

find . -iname *.page -exec ~/t.sh {} | sort 

我不太清楚你的awk腳本但因爲你認爲它是什麼你需要讓我們暫時傳達一下。

+0

謝謝,那肯定會奏效。這就是說,任何想法如何將表達式傳遞給包含括號的-exec? – 2013-05-15 18:26:44

+0

請發表表達。通過括號,你可能意味着某種類型的模式匹配... – 2013-05-15 19:56:18

+0

看起來像我跳過槍,它不是括號它是awk,這個作品只是找到'find。 -iname「* .cls」-exec echo'{if(length($ 0)> L){LINE = $ 0; L =長度($ 0)}} END {print LINE「L」L}'{} \;' – 2013-05-16 20:14:08

相關問題