SED를 통해 비슷한 단어로 된 줄 바꾸기

SED를 통해 비슷한 단어로 된 줄 바꾸기

샘플_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')

파일의 어디에 있는지는 중요하지 않습니다.

관련 정보