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オプションと組み合わせて使用​​しますか?

関連情報