sed를 사용하여 두 줄과 일치하는 줄을 추가하세요.

sed를 사용하여 두 줄과 일치하는 줄을 추가하세요.

아래와 같은 파일이 있습니다

SID_LIST_LISTENER_DG =
  (SID_LIST =
      (SID_DESC =
         (GLOBAL_DBNAME = DRCDBDB_DGMGRL)
         (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)
         (SID_NAME = DRCDBDB1)
      )
      (SID_DESC =
         (GLOBAL_DBNAME = DRNONCDB_DGMGRL)
         (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)
         (SID_NAME = DRNONCDB1)
      )
   )



SID_LIST_LISTENER =
  (SID_LIST =
      (SID_DESC =
         (GLOBAL_DBNAME = DRTESTDB)
         (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)
         (SID_NAME = DRTESTDB1)
      )
      (SID_DESC =
         (GLOBAL_DBNAME = DRMIGDB)
         (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)
         (SID_NAME = DRMIGDB1)
      )
      (SID_DESC =
         (GLOBAL_DBNAME = DRNONCDB)
         (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)
         (SID_NAME = DRNONCDB1)
      )
   )

다음 명령을 사용하여 파일에 다음 줄을 추가하고 있습니다. 그러나 두 개의 동일한 일치 행이 있으므로 두 행 모두에 다음 줄을 추가했습니다.

sed -i '/SID_LIST =/a \ \ \ \ (SID_DESC = \n \ \ \ \ \ (GLOBAL_DBNAME = DB11G) \n \ \ \ \ \ (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) \n \ \ \ \ \ (SID_NAME = DB11G1) \n \ \ \ )' /tmp/listener.ora

"SID_LIST_LISTENER = (SID_LIST ="이제 줄 뒤에 추가하면됩니다.

sed를 사용하여 두 줄을 일치시키는 방법

답변1

첫 번째 줄을 간단한 /^...정규식과 일치시킨 다음 대괄호 블록을 사용하여 두 번째 줄을 확인할 수 있습니다.

sed '/^SID_LIST_LISTENER =$/{ N ; /\n\s*(SID_LIST =$/ a _line(s) to append _
    ; }'

N다음 입력 줄을 읽고 이를 기존 입력 줄에 추가하며 /\n...조인에서만 일치합니다. 모든 불일치에 대해 입력은 여전히 ​​변경되지 않고 인쇄됩니다.

줄 추가를 사용하려고 할 때 a\모든 내용을 스크립트 파일에 넣는 것이 더 쉬울 수 있습니다.

/^SID_LIST_LISTENER =$/{ N ;
  /\n\s*(SID_LIST =$/ a\
    (SID_DESC =\
      (GLOBAL_DBNAME = DB11G)\
      (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)\
      (SID_NAME = DB11G1)\
    )
  ; }

그리고 전화해

sed -f addlines.sed

또한 입력에 두 개의 연속된 "첫 번째 줄"이 포함되어 있으면 이 루틴이 작동하지 않습니다.

SID_LIST_LISTENER =
SID_LIST_LISTENER =
  (SID_LIST =

첫 번째 일치는 두 번째 일치를 "소진"하기 때문에 입력 구조를 고려하면 그런 일이 발생하지 않을 것 같습니다.

관련 정보