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=]