这是标准输出 ls -ln | nl
wolf@linux:~$ ls -lh | nl
1 total 24
2 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
3 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
4 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
total 24
是否可以从第二行的实际文件/目录开始,而不是从 开始编号?
期望输出
wolf@linux:~$ ls -lh | nl
total 24
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
JoL*_*JoL 15
nl
$ ls -lh | { sed -u q; nl; }
total 24
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
Run Code Online (Sandbox Code Playgroud)
sed
(-u
用于禁用缓冲),将消耗一行和q
uit,在终止前隐式打印该行。nl
消耗其余的行。
如果你真的想要缩进第一行,你可以这样做:
$ ls -lh | { sed -u 's/^/ /;q'; nl; }
total 24
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
Run Code Online (Sandbox Code Playgroud)
如果您想进一步向下开始行编号,请告诉sed
何时q
uit:
$ ls -alh | { sed -u 's/^/ /;3q'; nl; }
total 24
drwx------ 1 wolf wolf 186 Sep 24 22:18 .
drwx------ 1 wolf wolf 186 Sep 24 22:18 ..
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
Run Code Online (Sandbox Code Playgroud)
你也可以使用类似的东西/\.\.$/q
而不是3q
.
ann*_*hri 13
这nl
将从 0 开始:
$ ls -lh | nl -v 0
0 total 24
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
Run Code Online (Sandbox Code Playgroud)
这有点难看,但至少使用 GNU Coreutils 实现,nl
您可以通过正则表达式指定要编号的行 - 因为t
它不是ls
长列表输出1 中可能的文件类型之一,您可以这样做
ls -lh | nl -bp'^[^t]'
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不能保持输出对齐。
也许最正式的正确方法是将ls
输出分成不同的标题和正文部分:
$ ls -lh | sed -e '1s/.*/\\:\\:\\:\n&\n\\:\\:/' | nl
total 0
1 -rw-rw-rw- 1 steeldriver steeldriver 0 Sep 9 19:53 bar
2 -rw-r--r-- 1 steeldriver steeldriver 449 Sep 16 17:41 bash_envs
3 -rw-rw-rw- 1 steeldriver steeldriver 131 Sep 5 18:13 dirlist
4 -rw-r--r-- 1 steeldriver steeldriver 359 Sep 13 19:42 error_status
Run Code Online (Sandbox Code Playgroud)
(默认情况下,标题编号样式为none)。
你可以试试awk
:
ls -lh | awk '{printf("%5s ",NR==1?" ":NR-1); print}'
Run Code Online (Sandbox Code Playgroud)
这将打印“总计”行而不对其进行编号,以及所有剩余的带有数字的行,右调整,字段宽度为 5。数字和行内容之间的空格将是两个空格(格式字符串5s
中的后面的文本printf()
); 您可以将其替换为其他内容,例如\t
.
如果您不需要“总计”行,则可以使用
ls -lh | awk 'NR>1{print (NR-1) "\t" $0}'
Run Code Online (Sandbox Code Playgroud)
或者
ls -lh | awk 'NR>1 {printf("%5s ",NR-1); print}'
Run Code Online (Sandbox Code Playgroud)
反而。
归档时间: |
|
查看次数: |
659 次 |
最近记录: |