ディレクトリ内でファイルテキストのグローバル(繰り返し)置換操作を繰り返し実行する必要がありますが、問題を引き起こすいくつかの制限があります。
- 以下のように、sedを中断する改行文字を含むように置き換える必要があります。sedが終了していない「s」のエラーを表示するのはなぜですか?
- AWS DataPipeline を使用していて、コマンドの実行中に InputDirectory でファイルを変更して発生する問題を解決する必要があるため、ファイルを別のディレクトリに出力する必要があります。 (したがって、変更された各ファイルはファイル名は同じですが、OutputDirectoryのファイルに書き込む必要があります。)
- また、グローバルにファイル名を出力する際に問題がありました。
したがって、いくつかの点が残る可能性があります。
find
ファイルを列挙する- ファイルを繰り返し、ファイルごとに入力パスを出力パスに置き換えます
sed
。 cat
ファイルを作成し、内容をawk
更新されたパスにパイプし、内容を書き込みます。- プロセス中に必要なディレクトリを構成します。 (これは出力リダイレクトを介して自動的に発生する必要があると思いますが、もしそうであれば明示的にしたいと思いました。)
これを行う簡単な方法はありますか?
答え1
GNUを使用している場合は、代替文字列に改行文字を使用
sed
できます。\n
otherの場合はsed
リテラル改行文字を使用しますが、バックスラッシュでエスケープしてください。find ... -print | sed -e 's:oldpath:newpath:'
パスを変更するには、シェルループの代わりに使用してください。oldpath または newpath に
:
文字が含まれている場合は、別の区切り文字を使用します。ファイル名に改行文字を含めることができる場合(ここではい有効なファイル名文字)とGNU sedが利用可能な場合(Linuxのデフォルト/標準)、GNU sedオプションの
-print0
代わりにfindオプションを使用してください。-print
-z
sed -z -e 's:oldpath:newpath:'
mkdir -p "$(dirname "$filename")"
各入力ファイル名に対して同様のディレクトリパスを作成できます。rsync -a sourcedir destdir
オプションで、いくつかの依存関係および--exclude
/または--include
オプションと組み合わせて使用しますか?