
這是標準輸出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:~$
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:~$
答案1
將第一行與其他內容一起使用,然後將其餘的內容傳遞給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
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
如果您想進一步向下開始行編號,請告訴sed
何時q
退出:
$ 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
您也可以使用類似的東西/\.\.$/q
來代替3q
.
答案2
這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
答案3
它有點難看,但至少使用 GNU Coreutils 實現,nl
您可以透過正規表示式指定要編號的行 - 因為t
它不是ls
長列表輸出中可能的檔案類型之一1你可以做
ls -lh | nl -bp'^[^t]'
不幸的是,這並不能保留輸出對齊。
也許最正式正確的方法是將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
(預設情況下,標題編號樣式為沒有任何)。
答案4
你可以嘗試用awk
以下方法代替:
ls -lh | awk '{printf("%5s ",NR==1?" ":NR-1); print}'
這將列印「總計」行而不對其進行編號,以及所有剩餘的帶有數字的行,右調整,欄位寬度為 5 5s
。後面的文字)printf()
);您可以將其替換為其他內容,例如\t
.
如果您不需要“總計”行,您可以使用
ls -lh | awk 'NR>1{print (NR-1) "\t" $0}'
或者
ls -lh | awk 'NR>1 {printf("%5s ",NR-1); print}'
反而。