샘플_init.ora 파일이 있습니다.
파일에 2줄이 있습니다.
db_create_file_dest="DATAG"
control_files=('DATAG/DBNAME/controlfile/control01.ctl','DATAG/DBNAME/controlfile/control02.ctl')
이제 두 번째 행을 DATAG에서 DATAC2로 변경하고 싶습니다. 어떤 방법이 있나요? 많은 SED/AWK 포럼을 시도했지만 옵션이 없었습니다. SED를 기반으로 한 응답은 높은 평가를 받을 것입니다.
답변1
귀하의 질문은 "유사한" 행을 언급하지만 이를 어떻게 구별해야 하는지는 알려주지 않습니다.
예를 들어, 모든 인스턴스를 다음으로 DATAG
바꿉니다 .DATAC2
오직control_files
사용할 수 있는 문자열로 시작하는 줄
sed '/^control_files/ s/DATAG/DATAC2/g'
^control_files
다른 구별되는 패턴으로 바꾸면 일반적인 방법으로 작동합니다.
답변2
가장 확실한 sed 솔루션은 다음과 같습니다.
sed 2s/DATAG/DATAC2/g sample_init.ora > new_file.ora
또는 sed가 지원하는 경우 제자리에서 편집하세요 -i
.
sed -i 2s/DATAG/DATAC2/g sample_init.ora
sed 명령은 다음과 같습니다.
2
- 2호선s//
- 검색 및 교체g
- 첫 번째 게임뿐만 아니라 모든 게임을 교체합니다.
답변3
이것이 다음과 같다고 가정하자정밀한파일에 행이 표시되는 형식은 다음을 사용하십시오.
sed -i 's/DATAG\//DATAC2\//g' <filename> > <new_filename>
두 번째 줄의 DATAG 인스턴스 뒤에 "/"가 있지만 첫 번째 줄에는 없기 때문에 이것이 작동합니다. 따라서 실행하면 제공한 예가 표시됩니다.
db_create_file_dest="DATAG"
control_files=('DATAC2/DBNAME/controlfile/control01.ctl','DATAC2/DBNAME/controlfile/control02.ctl')
파일의 어디에 있는지는 중요하지 않습니다.