Delete

1. pattern space 에 있는 내용을 전부 삭제합니다.
2. pattern space 에 데이터가 없으므로 명령 사이클을 중단하고 다음 사이클을 시작합니다.
3. 읽어들일 라인이 없으면 exit 합니다.

d 명령을 사용할 때 기억해야 될 것은 명령이 실행되면 현재 사이클이 중단되고 새로운 사이클을 시작한다는 것입니다. 만약에 pattern space 삭제후 현재 위치에서 실행을 계속하려면 z 명령 을 사용할 수 있습니다.

1. pattern space 에서 첫 번째 라인을 삭제합니다.
2. 명령 사이클의 BEGIN 위치로 가서 다음 사이클을 시작합니다. ( 이때 라인을 읽어들이지 않습니다 )
3. pattern space 에 라인이 하나만 남았을 경우는 d 명령과 같은 역할을 합니다.

이 명령은 multiple lines 을 처리할 때 사용하는 명령으로 pattern space 에 라인이 하나만 남았을 경우는 삭제되면 이어지는 명령에서 처리할 데이터가 없으므로 d 명령과 같은 역할을 합니다.

예제 1

파일 내용중에 구분자로 사용되는 스트링값 --- 이 여러군대 나올 수 있는데 마지막 구분자 이후의 내용만 출력하는것 입니다.

$ cat file
111
222
333
---
444
555
666
---
777
888
999

$ sed -E '
    :X          # 레이블 X 를 지정
    /---$/d     # pattern space 의 마지막 라인 그러니까 가장 최근에 append 한 라인이
                # "---" 구분자 일경우 d 명령으로 pattern space 를 모두 삭제하고 새로운 사이클 시작
    N           # N 명령으로 다음 라인을 읽어들여 pattern space 에 append
    bX          # 레이블 X 로 (b) 분기
}' file

777
888
999

예제 2

[FILE] 아래 [LINE] 이 없는 경우 삭제합니다. [LINE] 은 모두 표시합니다.

$ cat file
[FILE]: C:\Users\user\git\build.xml
[FILE]: C:\Users\user\git\dataload-pom.xml
[FILE]: C:\Users\user\git\local.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:\Users\user\git\pom.xml
[FILE]: C:\Users\user\git\release.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
.............................................

$ sed -E '
    /\[FILE]/{             # [FILE] 라인이 입력되면 
        N                  # `N` 명령으로 다음 라인을 pattern space 에 append

        /\n\[FILE]: /D     # 두 번째 라인도 [FILE] 라인일 경우 `D` 명령으로
                           # 첫 번째 라인을 삭제하고 명령 사이클의 BEGIN 으로 분기
    }
' file

[FILE]: C:\Users\user\git\local.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]
    [LINE]:  [bill.report.toAddress=]
[FILE]: C:\Users\user\git\release.properties
    [LINE]:  [job.mail.toAddress=]
    [LINE]:  [log.mail.client.toAddress=]