cat 파일의 LPAD 업데이트 쿼리에 대한 UNIX 스크립트 명령은 다음과

텍스트 파일 데이터를 열고 해당 파일에 업데이트 쿼리를 작성하고 cron을 통해 실행될 SQL 파일에 저장하는 스크립트를 원합니다. 명령을 준비했지만 RPAD에 업데이트 쿼리를 작성하는 방법은 다음과 같습니다. 샘플 데이터 및 명령은 다음과 같습니다.

text file data : cat file.txt
123456789
234567891
345678912
456789123

명령:

고양이 file.txt | sed ‘s / $ / update table set field where file_number = “file.txt”/’> file1.sql

현재 출력 :

123456789update table set field where file_number=
234567891update table set field where file_number=
345678912update table set field where file_number=
456789123update table set field where file_number=

예상 출력 :

update table set field where file_number='123456789';
update table set field where file_number='234567891';
update table set field where file_number='345678912';
update table set field where file_number='456789123';



답변

더 우아한 접근 방식이있을 수 있지만 (그러나 그중 하나가 지금 내 마음에 들어옵니다) sed.

  • 예상대로 명령이 작동하지 않는 이유

    $일치하는 라인의 끝을 당신의 이유, 그건 update table ...문자열이 각 줄의 끝에 배치됩니다.

  • 개선하는 방법?

    1. 당신은 필요하지 않습니다 cat; sed파일을 인수로 사용합니다.
    2. 전체 라인을 일치하는 패턴으로 정의하십시오 ( .*모든 것을 일치시키고 이스케이프 된 괄호로 묶어 참조하십시오).\(.*\)
    3. sql 명령 문자열을 대체물로 사용하고 \1적절한 곳에 참조 표시를 두십시오 .

      sed "s|\(.*\)|update table set field where file_number=\'\1\';|" file.txt > file.sql

      생산

      update table set field where file_number='123456789';
      update table set field where file_number='234567891';
      update table set field where file_number='345678912';
      update table set field where file_number='456789123';

답변