5

我想输出目录中的所有标题。每行有一个条目,每行应以四个空格开头,并应以一个空格和一个“\”字符结尾。

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

我已经想出了如何使输出每行一个条目。

ls -1 *.h

但我不知道如何进行格式化。我应该在哪里学习更复杂的格式?

编辑:

所有答案中的所有脚本都会产生所需的输出。我希望我能接受所有的答案。

4

5 回答 5

11

您可以使用printf和 shell 通配符而不是尝试格式化ls输出。

尝试类似:

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

ls真正意味着作为人类的“交互式”工具,避免将其用于其他任何事情。

于 2013-08-05T07:14:52.277 回答
5
ls -1 *.h | sed 's/^/    /' | sed 's/$/ \\/'

或者,您可以说:

ls -1 *.h | sed 's/.*/    & \\/'
于 2013-08-05T07:13:24.850 回答
3

find . -maxdepth 3 -type f -iname "*" -printf "%h,%f,%CY-%Cm-%Cd %CT,%s,%u,%M\n"
于 2021-05-13T20:10:49.320 回答
2
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 '$_="    ".$_." \\";'
于 2013-08-05T07:11:43.203 回答
0
ls -l *.h|rev|ts "\\"|rev|ts "   "

(如果 ls 输出不是交互式终端,它将逐行显示文件名)

于 2020-08-01T20:45:36.727 回答