\f
Perlの改ページ文字です。これらの不正なファイルは、PerlとXMLの両方を初めて使用する人によって作成されたようです。
これは、多くのペリエ修正です。これは、sedで受け入れられた回答とは異なり、一度に1つのファイルでしか機能しないため、すべてのファイルの更新を自動化するというOPの目標も満たしていますfind
。
\f
16進コードの代わりに、それ自体を単純に使用できますx0c
。
find . -type f -exec perl -pi.bkp -e 's [ \f ilename ][ /f ilename ]gx' {} \;
ここで私は-type f
tel find
に追加してプレーンファイルのみを返すようにしました。それ以外の場合find
は.
リストに戻り、編集しようとすると警告が表示されますが、それ以外はすべて機能します。
また、x
実際の空白を無視するフラグを使用して、正規表現を見やすくしました。これにより、正規表現の要素の間隔を空けることができます。これが気に入らない場合は、ここにありません:
find . -type f -exec perl -pi.bkp -e 's[\filename][/filename]g' {} \;
そして、すべてのフォームフィード文字が偽であり、すべてをに置き換える必要がある/f
場合は、ワンライナーをさらにスリム化できます。
find . -type f -exec perl -pi.bkp -e 's[\f][/f]g' {} \;
s///
Perlでは、正規表現置換コマンドの要素()を囲むためにスラッシュを使用する必要はありません。任意の記号を使用できます。ただし、ブラケットのような記号のペアを使用する場合はs[old][new]
、たとえば両方を使用する必要があります。
スラッシュを使用していないので、スラッシュをエスケープする必要はありません。
の場合-i.bkp
:perl -pi -e
インプレースで編集できますが、検索と置換のPerlプログラムが間違っている場合に備えて追加の保険が必要な場合は、ファイル拡張子を付けて、元のファイルのコピーを作成できます。君は。ここでは、.bkp
。
Perlの最新バージョンでは、システムで停電やディスク容量不足などの深刻な問題が発生した場合に備えて、インプレース編集がより弾力的になるように更新されています。これは、最近のPerlで改善されたインプレース編集に関するPerlの作者brian d foyです。
Perlはこれらの種類のタスクに使用することを検討する必要があります。Perlは非常に強力でありながら評価が低い汎用プログラミング言語であるため、元の設計目標の1つは置換sed
およびawk
より良い何かを。
Perl 5の正規表現マッチング機能と改良された正規表現構文はsed
、awk
およびPerl 6を除く他のすべてのプログラミング言語を Perlは単純なものと高度なregex操作の両方で最も賢明な選択肢となっています。
明確にするために:でも問題sed
なく動作し、編集した各ファイルのバックアップを作成するfind
こともできますがsed -i.bkp
、私が知る限り、Perl 5.28以降の特別な復元力は備えていません。また、従来のUNIX®の正規表現の構文よりも、扱いにくく、はるかに強力ではありません。
<\filename>
代わりに使用したようです。これらのファイルのソースを追跡し、生成ツールの問題を開発者に指摘する必要があります。ファイルを修正するには、受け入れられた答えで十分です。</filename>
\f