
이것은 표준 출력입니다.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
종료 전에 암시적으로 줄을 인쇄합니다. 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가 됩니다. 숫자와 줄 내용 사이의 공백은 2개의 공백이 됩니다( 형식 문자열 5s
에서 뒤에 오는 텍스트). printf()
); 와 같은 다른 것으로 바꿀 수 있습니다 \t
.
"총계" 행이 필요하지 않은 경우 다음을 사용할 수 있습니다.
ls -lh | awk 'NR>1{print (NR-1) "\t" $0}'
또는
ls -lh | awk 'NR>1 {printf("%5s ",NR-1); print}'
대신에.