我想輸出目錄中的所有標題。每行有一個條目,每行應以四個空格開始,並以空格和'\'結尾。如何格式化ls的輸出?
____header1.h_\
____header2.h_\
____header3.h_\
我已經想通了如何使每行輸出一個條目。
ls -1 *.h
但我不知道如何做格式。我應該在哪裏學習更復雜的格式?
編輯:
所有在所有的答案中的腳本產生所需的輸出。我希望我能接受所有答案。
我想輸出目錄中的所有標題。每行有一個條目,每行應以四個空格開始,並以空格和'\'結尾。如何格式化ls的輸出?
____header1.h_\
____header2.h_\
____header3.h_\
我已經想通了如何使每行輸出一個條目。
ls -1 *.h
但我不知道如何做格式。我應該在哪裏學習更復雜的格式?
編輯:
所有在所有的答案中的腳本產生所需的輸出。我希望我能接受所有答案。
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 '$_=" ".$_." \\";'
ls -1 *.h | sed 's/^/ /' | sed 's/$/ \\/'
或者,你可以說:
ls -1 *.h | sed 's/.*/ & \\/'
您可以使用printf
和外殼通配符,而不是試圖格式化ls
輸出。
試着這麼做:
$ printf ' %s \\\n' *.h
a.h \
b.h \
c.h \
ls
是真正目的是爲人類的「互動」的工具,避免使用它爲別的。
+1建議不要解析ls的輸出 – anubhava
謝謝!您建議的printf是這一個http://linux.die.net/man/3/printf?我很困惑。它是一個C函數嗎?你能像這樣從shell調用C函數嗎?當然你的解決方案的作品。 –
這不是C函數,它是一個標準的POSIX shell實用程序(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html)。 Bash也將其作爲內建函數來實現,因此這比任何涉及管道,sed,ls或其他任何東西的任何東西都便宜。至於解析ls的輸出,請參閱http://mywiki.wooledge.org/ParsingLs – Mat
爲什麼啓動兩個'sed'進程? 'ls -1 * .h | sed's |^\(。*)$ | \ 1 \\ |''應該用較少的資源去做。 –
@umläute添加另一個版本來保存更多字符。 – devnull