listener.ora
검색 문자열로 지정된 행 블록을 주석 처리해야 하는 Oracle 파일이 있습니다 . 예를 들어,
>(DESCRIPTION=
>>(ADDRESS_LIST=
>>>(ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))
>>>(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
>SID_LIST_LISTENER=
>>(SID_LIST=
>>>(SID_DESC=
>>>>(GLOBAL_DBNAME=sales)
>>>>(ORACLE_HOME=/oracle9i)
>>>>(SID_NAME=ales)
>>>>(PROGRAM=extproc))
>>>(SID_DESC=
>>>>(SID_NAME=plsextproc)
>>>>(ORACLE_HOME=/oracle9i)
>>>>(PROGRAM=extproc)))
sales
위 파일에서 (데이터베이스 이름) 을 검색 하고 다음 SID_DESC
블록까지 해당 문자열을 포함하는 전체 블록을 주석 처리해야 합니다. 예를 들어 원하는 출력은 다음과 같습니다.
>(DESCRIPTION=
>>(ADDRESS_LIST=
>>>(ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))
>>>(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
>SID_LIST_LISTENER=
>>(SID_LIST=
>>>#(SID_DESC=
>>>>#(GLOBAL_DBNAME=sales)
>>>>#(ORACLE_HOME=/oracle9i)
>>>>#(SID_NAME=ales)
>>>>#(PROGRAM=extproc))
>>>(SID_DESC=
>>>>(SID_NAME=plsextproc)
>>>>(ORACLE_HOME=/oracle9i)
>>>>(PROGRAM=extproc)))
답변1
이것은 상당히 간단한 작업이다sed
sed '
/SID_DESC/{
/\n/{
P
D
}
:1
N
/PROGRAM/!b1
/sales/s/[^\n]*\n/#&/g
}
' listener.ora
답변2
제가 보기에는 이것은 단일 sed 명령의 작업이 아니라 완전한 쉘 스크립트의 작업인 것 같습니다.
- 행 카운터 정의
- SID 태그 정의
- 한 줄씩 읽기
- 각 SID 위치를 표시합니다(배열에 넣습니다).
- 각 패턴 일치 위치를 표시합니다(다른 배열에 넣습니다).
- 배열을 확인하십시오. SID 간에 일치하는 경우 첫 번째 SID부터 두 번째 SID까지 모든 줄을 주석 처리합니다. - 1줄