[Command-line] nl을 이용한 줄번호 설정

2021. 8. 12. 12:10Linux/Command-line

반응형
  1. nl
  2. Option
    1. 자주 쓰는 옵션
      1. STYLE 옵션
      2. FORMAT 옵션
    2. 기타 옵션
  3. 예시
    1. -b
      1. 기본
      2. 모든줄에 줄번호(-ba)
      3. 줄번호 표시안함(-bn)
      4. 특정 문자열있을 경우에만 줄번호(-bp문자열)
    2. -n
      1. 기본
      2. 왼쪽 정렬, leading zero 없음(-nln)
      3. 오른쪽 정렬, leading zero 있음(-nrz)
    3. 줄번호 뒤 문자열 변경(-s)
    4. 줄번호 증분 변경(-i)
    5. 공백 줄번호 그룹화(-l)
    6. 줄번호 시작번호 변경(-v)
    7. 줄번호 출력할 컬럼 변경(-w)

1. nl

number lines of files

nl [OPTION]... [FILE]...

파일안의 문장 맨 앞에 줄번호(line numbers)를 붙여서 출력합니다.
기본적으로 공백에는 줄번호를 붙이지 않습니다.

※ 단, space는 문자로 인식하기 때문에, 줄번호가 붙습니다.


2. Option

2.1. 자주 쓰는 옵션

  • -b, --body-numbering=STYLE
    • 기본값: -bt
    • 줄번호를 설정할 기준을 설정합니다.
  • -n, --number-format=FORMAT
    • 기본값: -nrn
    • 줄번호를 설정할 형식을 설정합니다.
    • 정렬방향(왼쪽정렬, 오른쪽정렬)과 leading zero 설정 유무를 설정합니다.
  • -s, --number-separator=STRING
    • 줄번호와 문장 사이의 문자열을 변경합니다.

2.1.1. STYLE 옵션

-b 옵션에 설정하는 옵션으로, 줄번호를 설정할 기준을 정의하는 옵션입니다.
기본값은 -bt 입니다.

  • a
    • (공백을 포함한) 모든 라인에 줄번호를 붙입니다.
  • t
    • 공백에는 줄번호를 붙이지 않습니다.
  • n
    • 모든 라인에 줄번호를 붙이지 않습니다.
  • p문자열
    • 문자열이 포함된 라인에만 줄번호를 붙입니다.

2.1.2. FORMAT 옵션

-n 옵션에 설정하는 옵션으로, 정렬방향(왼쪽정렬, 오른쪽정렬)과 leading zero 설정 유무를 설정합니다.
기본값은 -nrn 입니다.

  • ln
    • 왼쪽 정렬, leading zero 없음
  • rn
    • 오른쪽 정렬, leading zero 없음
  • rz
    • 오른쪽 정렬, leading zero 있음

2.2. 기타 옵션

자주 이용되지 않지만

  • -i, --line-increment=NUMBER
    • 줄번호 증가량을 설정합니다.
  • -l, --join-blank-lines=NUMBER
    • NUMBER 이상의 빈줄이 있을 경우, NUMBER 이상의 빈줄을 한줄로 간주합니다.(= NUMBER보다 적은 빈줄은 줄번호 설정하지 않습니다.)
    • -b a 옵션과 함께 사용해야 합니다.
  • -v, --starting-line-number=NUMBER
    • 맨 첫번째 줄번호 수를 지정합니다.
    • 기본값은 1입니다.
  • -w, --number-width=NUMBER
    • 기본값: -w6
    • 줄번호를 출력할 column을 지정합니다. 기본적으로 6번째칸에 오른쪽정렬로 표기됩니다.
    • 오른쪽 정렬일때에만 적용되는 옵션입니다. (= 왼쪽정렬(-nrn)일 때에는 이 옵션은 무시됩니다.)

3. 예제

3.1. -b

3.1.1. 기본

-b 옵션을 생략할 경우, 기본적으로 -bt로 설정됩니다.

nl melon.txt
     1	grape 10e100 nnnnn
     2	abcde 230 mmmmm
     3	apple -infinity fifif

     4	ABCDE 999e-34 dmmmn
     5	violin 33 test
     6	    ABCDE infinity dmmmn
     7	test 4.2 test

     8	002
     9	    98
    10	    098
    11	GRAPE 11.5 dmmmn

    12	lily NaN aaaaa

공백에는 줄번호가 붙지 않습니다.


3.1.2. -ba

a옵션을 붙일 경우 공백에도 줄번호를 붙입니다.

nl -ba melon.txt
     1	grape 10e100 nnnnn
     2	abcde 230 mmmmm
     3	apple -infinity fifif
     4
     5	ABCDE 999e-34 dmmmn
     6	violin 33 test
     7	    ABCDE infinity dmmmn
     8	test 4.2 test
     9
    10	002
    11	    98
    12	    098
    13	GRAPE 11.5 dmmmn
    14
    15	lily NaN aaaaa
    16

3.1.3. -bn

n옵션을 붙일 경우 모든 라인에 줄번호를 붙이지 않습니다.

nl -bn melon.txt
       grape 10e100 nnnnn
       abcde 230 mmmmm
       apple -infinity fifif

       ABCDE 999e-34 dmmmn
       violin 33 test
           ABCDE infinity dmmmn
       test 4.2 test

       002
           98
           098
       GRAPE 11.5 dmmmn

       lily NaN aaaaa

3.1.4. -bp문자열

특정 문자열이 포함된 라인에만 줄번호를 붙일 수 있습니다.

nl -bpprivate TokenClass.java | tail -n 20
               return ResponseEntity.ok().body(new TokenResponse(jwt));
           }

       	@Getter @Setter
       	@Schema(name = "TokenRequest")
       	public static class TokenRequest {
     5			private String apikey;
     6			@Schema(description = "현재시각(단위: millisecond)") private String nonce;
       	}

       	@Getter
       	public class TokenResponse extends BasicResponse {
     7			@Schema(description = "JWT 토큰") private String token;

       		public TokenResponse(String token) {
       			this.token = token;
       		}
       	}
       }

3.2. -n

-n옵션은 format을 지정하는 옵션입니다.

3.2.1. 기본 (= -nrn)

오른쪽 정렬, leading zero 없음이 기본값입니다.

nl /etc/passwd | head -n 5
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

3.2.2. 왼쪽 정렬, leading zero없음 (= -nln)

nl -nln /etc/passwd | head -n 5
1     	root:x:0:0:root:/root:/bin/bash
2     	bin:x:1:1:bin:/bin:/sbin/nologin
3     	daemon:x:2:2:daemon:/sbin:/sbin/nologin
4     	adm:x:3:4:adm:/var/adm:/sbin/nologin
5     	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

3.2.3. 오른쪽 정렬, leading zero 있음 (= -nrz)

nl -nrz /etc/passwd | head -n 5
000001	root:x:0:0:root:/root:/bin/bash
000002	bin:x:1:1:bin:/bin:/sbin/nologin
000003	daemon:x:2:2:daemon:/sbin:/sbin/nologin
000004	adm:x:3:4:adm:/var/adm:/sbin/nologin
000005	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

3.3. -s

줄번호 뒤에 붙일 문자열을 설정합니다.

nl /etc/passwd | head -n 5
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

기본값은 위와 같습니다.


nl -s '...' /etc/passwd | head -n 5
     1...root:x:0:0:root:/root:/bin/bash
     2...bin:x:1:1:bin:/bin:/sbin/nologin
     3...daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4...adm:x:3:4:adm:/var/adm:/sbin/nologin
     5...lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

다른 문자열로 바꾼 결과값입니다.


3.4. -i

줄번호 증가율을 변경하는 옵션입니다.

nl Hello.java
     1	public class Hello {
     2		public static void main(String[] args) {
     3			System.out.println("hello");
     4		}
     5	}

기본적으로는 1씩 증분


nl -i 3 Hello.java
     1	public class Hello {
     4		public static void main(String[] args) {
     7			System.out.println("hello");
    10		}
    13	}

3씩 줄번호가 증분합니다.


3.5. -l

-l 옵션은 여러줄의 공백을 한줄로 줄여주는 옵션입니다.
따라서, 공백도 줄번호를 설정하고 있는 경우에 사용할 수 있는 옵션입니다.

아래와 같은 문서가 있다고 할때

nl -ba nl-test.txt
     1
     2	abcde
     3	 f999
     4
     5	 fhfj
     6
     7
     8
     9	 idjfh
    10
    11	 fjdh
    12	hhff
    13
    14

-l2라고 하면, 2줄이상 공백이 있는 경우에만 줄번호를 매기기 때문에 아래와 같은 결과가 나오고

nl -ba -l2 nl-test.txt
     1	abcde
     2	 f999

     3	 fhfj

     4

     5	 idjfh

     6	 fjdh
     7	hhff

     8

-l3라고 하면, 3줄이상 공백이 있는 경우에만 줄번호를 매기기 때문에 아래와 같은 결과가 나옵니다.

nl -ba -l3 nl-test.txt
     1	abcde
     2	 f999

     3	 fhfj


     4
     5	 idjfh

     6	 fjdh
     7	hhff



3.6. -v

-v 옵션으로 줄번호 시작숫자를 변경할 수 있습니다.

nl /etc/passwd | head -n 5
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
nl -v10 /etc/passwd | head -n 5
    10	root:x:0:0:root:/root:/bin/bash
    11	bin:x:1:1:bin:/bin:/sbin/nologin
    12	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    13	adm:x:3:4:adm:/var/adm:/sbin/nologin
    14	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

3.6. -w

줄번호를 출력할 column을 지정하는 옵션으로, 오른쪽 정렬일 때 적용할 수 있는 옵션입니다.
기본적으로 6번째칸에 오른쪽정렬로 표기됩니다.

3.6.1. 기본(= -w6)

nl TokenClass.java | head -n 5
     1	package me.jiniworld.demo.controllers;

     2	import java.io.UnsupportedEncodingException;
     3	import java.util.Calendar;
     4	import java.util.Date;

3.6.2. -w2

nl -w2 TokenClass.java | head -n 5
 1	package me.jiniworld.demo.controllers;

 2	import java.io.UnsupportedEncodingException;
 3	import java.util.Calendar;
 4	import java.util.Date;

3.6.3. -w4

nl -w4 TokenClass.java | head -n 5
   1	package me.jiniworld.demo.controllers;

   2	import java.io.UnsupportedEncodingException;
   3	import java.util.Calendar;
   4	import java.util.Date;


3.6.3. -nrz 옵션과 함께

만일 -nrz 옵션과 함께 사용한다면??

nl -nrz -w4 TokenClass.java | head -n 5
0001	package me.jiniworld.demo.controllers;

0002	import java.io.UnsupportedEncodingException;
0003	import java.util.Calendar;
0004	import java.util.Date;

nl -nrz -w2 TokenClass.java | head -n 5
01	package me.jiniworld.demo.controllers;

02	import java.io.UnsupportedEncodingException;
03	import java.util.Calendar;
04	import java.util.Date;

w는 6이상의 수도 설정할 수 있습니다.

nl -nrz -w8 TokenClass.java | head -n 5
00000001	package me.jiniworld.demo.controllers;

00000002	import java.io.UnsupportedEncodingException;
00000003	import java.util.Calendar;
00000004	import java.util.Date;

++

  • Linux nl command Example
  • Linux nl command Tutorial
  • nl command in Linux with example
728x90
반응형