DataPipeline - sed에 문제를 일으키고(설명된 대로) 파일을 새 위치에 기록해야 하는 반복적인 대체

DataPipeline - sed에 문제를 일으키고(설명된 대로) 파일을 새 위치에 기록해야 하는 반복적인 대체

디렉터리 내에서 파일 텍스트에 대한 전역(반복) 교체 작업을 반복적으로 수행해야 하지만 문제를 일으키는 몇 가지 제한 사항이 있습니다.

  1. 아래 설명과 같이 sed를 중단시키는 개행 문자를 포함하는 방식으로 교체해야 합니다.sed가 종료되지 않은 "s"에 대한 오류를 표시하는 이유는 무엇입니까?
  2. AWS DataPipeline을 사용하고 있고 명령 실행 중에 InputDirectory에서 파일을 변경하여 발생하는 문제를 해결해야 하기 때문에 파일을 다른 디렉터리에 출력해야 합니다. (그래서 수정된 각 파일을 파일 이름은 같지만 OutputDirectory에 있는 파일에 작성해야 합니다.)
  3. 또한 전역적으로 파일 이름을 출력하는 데 문제가 있었습니다.

따라서 몇 가지 사항이 남을 수 있습니다.

  1. find파일 열거 용
  2. 파일을 반복하고 각 파일에 대해 입력 경로를 출력 경로로 바꿉니다 sed.
  3. cat파일을 만들고 내용을 awk업데이트된 경로로 파이프한 후 내용을 씁니다.
  4. 프로세스 중에 필요한 디렉터리를 구성합니다. (이 작업은 출력 리디렉션을 통해 자동으로 발생해야 한다고 생각하지만 만일을 대비해 명시적으로 만들고 싶었습니다.)

이를 수행하는 쉬운 방법이 있습니까?

답변1

  1. GNU를 사용하는 경우 대체 문자열에 개행 문자를 사용할 sed수 있습니다 . \nother의 경우 sed리터럴 개행 문자를 사용하되 백슬래시로 이스케이프 처리하세요.

  2. find ... -print | sed -e 's:oldpath:newpath:'경로를 변경하려면 쉘 루프 대신 사용하십시오 .

    oldpath 또는 newpath에 :문자가 포함되어 있으면 다른 구분 기호를 사용하십시오.

    파일 이름에 개행 문자가 포함될 수 있는 경우(여기서유효한 파일 이름 문자) 및 GNU sed를 사용할 수 있는 경우(Linux의 기본값/표준) GNU sed 옵션 -print0대신 find 옵션을 사용하십시오 .-print-zsed -z -e 's:oldpath:newpath:'

  3. mkdir -p "$(dirname "$filename")"각 입력 파일 이름에 대해 유사한 디렉터리 경로를 만들 수 있습니다.

  4. rsync -a sourcedir destdir선택적으로 일부 종속성 --exclude및/또는 --include옵션 과 함께 사용하면 어떨까요 ?

관련 정보