sed 또는 awk를 사용하여 패턴 앞의 줄을 바꾸세요.

sed 또는 awk를 사용하여 패턴 앞의 줄을 바꾸세요.

파일에 다음과 같은 입력이 있습니다 sacro.sql.

{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }

{ unload file name = sacro00518.unl number of rows = 0 }

create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);

revoke all on "informix".sacro_log from "public" as "informix";

"Create table "informix".sacro_log" 위의 두 번째 줄을 테스트로 바꾸고 싶습니다.

내가 원하는 출력 예:

{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }

test

create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);

revoke all on "informix".sacro_log from "public" as "informix";

답변1

sed '/create table "informix"/i\
test
' data.in >data.out

그러면 다음을 포함하는 콘텐츠가 생성됩니다 data.out.

{ TABLE "informix".sacro_log row size = 64 number of columns = 3 index size = 0 }

{ unload file name = sacro00518.unl number of rows = 0 }

test
create table "informix".sacro_log
(
log_id serial not null constraint "informix".nnc_sac_log00,
log_type integer,
log_data text
);

i("삽입") 명령은 sed일치하는 패턴 앞에 지정된 텍스트를 삽입합니다. 삽입된 텍스트는 리터럴 줄 바꿈을 존중해야 합니다( GNU sed에서도 허용됨 sed '/pattern/i text').

답변2

아직 답변을 기다리고 계시는지 모르겠습니다. 도움이 될 수 있습니다.

awk -v newline=test -v trigger='create table "informix"' '
   {a[NR]=$0}
   NR>2 { if (index($0,trigger)>0) { a[NR-2]=newline; }}
   END { 
          for (i=1;i<=NR;i++) { print a[i] }
       }
   ' sacro.sql

관련 정보