Delete
1. pattern space 에 있는 내용을 전부 삭제합니다.
2. pattern space 에 데이터가 없으므로 명령 사이클을 중단하고 다음 사이클을 시작합니다.
3. 읽어들일 라인이 없으면 exit 합니다.
d
명령을 사용할 때 기억해야 될 것은 명령이 실행되면 현재 사이클이 중단되고 새로운 사이클을 시작한다는 것입니다.
1. pattern space 에서 첫 번째 라인을 삭제합니다.
2. 명령 사이클의 BEGIN 위치로 가서 다음 사이클을 시작합니다. ( 이때 라인을 읽어들이지 않습니다 )
3. pattern space 에 라인이 하나만 남았을 경우는 d
명령과 같은 역할을 합니다.
이 명령은 multiple lines 을 처리할 때 사용하는 명령으로 pattern space 에 라인이 하나만
남았을 경우는 삭제되면 이어지는 명령에서 처리할 데이터가 없으므로 d
명령과 같은 역할을 합니다.
예제 1
[FILE]
아래 [LINE]
이 없는 경우 삭제합니다. [LINE]
은 모두 표시합니다.
# 데이터 내용
[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=]
.............................................
# /XXX[^\n]*$/ 형식은 pattern space 의 마지막 라인에 XXX 가 있는지 매칭할때 사용하는 방법입니다.
$ sed -E '
/\[FILE]/{ # [FILE] 라인이 입력되면
N # `N` 명령으로 다음 라인을 pattern space 에 append
/\[FILE][^\n]*$/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=]