2013-08-05 84 views
1

我想輸出目錄中的所有標題。每行有一個條目,每行應以四個空格開始,並以空格和'\'結尾。如何格式化ls的輸出?

____header1.h_\ 
____header2.h_\ 
____header3.h_\ 

我已經想通了如何使每行輸出一個條目。

ls -1 *.h 

但我不知道如何做格式。我應該在哪裏學習更復雜的格式?

編輯:

所有在所有的答案中的腳本產生所需的輸出。我希望我能接受所有答案。

回答

1
ls -l *.h|awk '/\.h/{print " "$0" \\"}' 

或者在AWK一個更簡單的方法:

> ls -1 *.h | awk '$0=" "$0" \\"' 

測試:

> ls -1 *.hh 
Algorithms.hh 
Timer.hh 
a.hh 
> ls -1 *.hh | awk '/\.hh/{print " "$0" \\"}' 
    Algorithms.hh \ 
    Timer.hh \ 
    a.hh \ 
> 

或者你可以使用Perl:

ls -1 *.h | perl -plne '$_=" ".$_." \\";' 
4
ls -1 *.h | sed 's/^/ /' | sed 's/$/ \\/' 

或者,你可以說:

ls -1 *.h | sed 's/.*/ & \\/' 
+0

爲什麼啓動兩個'sed'進程? 'ls -1 * .h | sed's |^\(。*)$ | \ 1 \\ |''應該用較少的資源去做。 –

+0

@umläute添加另一個版本來保存更多字符。 – devnull

8

您可以使用printf和外殼通配符,而不是試圖格式化ls輸出。

試着這麼做:

$ printf ' %s \\\n' *.h 
    a.h \ 
    b.h \ 
    c.h \ 

ls是真正目的是爲人類的「互動」的工具,避免使用它爲別的。

+3

+1建議不要解析ls的輸出 – anubhava

+0

謝謝!您建議的printf是這一個http://linux.die.net/man/3/printf?我很困惑。它是一個C函數嗎?你能像這樣從shell調用C函數嗎?當然你的解決方案的作品。 –

+1

這不是C函數,它是一個標準的POSIX shell實用程序(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html)。 Bash也將其作爲內建函數來實現,因此這比任何涉及管道,sed,ls或其他任何東西的任何東西都便宜。至於解析ls的輸出,請參閱http://mywiki.wooledge.org/ParsingLs – Mat