「モデル」というフォルダがあります。その中で、「Test_Dbv3」という用語のすべてのインスタンスを「TestDbv3」に置き換える必要があります。test_host.hbm.xml、test_host2.hbm.xml、testHost.java、testHost2.java などの名前のファイルが複数あります。Unixコマンドまたは任意の言語のスクリプトを使用してこれを行う方法はありますか?
私はRHEL5に取り組んでいます。
sed
find
おそらく動作するはずです:
find . -type f -exec sed -e 's/Test_Dbv3/TestDbv3/g' -i.bak '{}' +
適切な名前のfind
コマンドは、ファイルを検索します。ここでは、.
ファイル ( ) である現在の作業ディレクトリ ( )内のファイルを検索しています-type f
。これらのファイルを使用して-exec
、コマンドに進みます: sed
. は、コマンドの終了を示し、オペレーティング システムが許可する限り多くのファイル+
に置き換えたいことを示します。{}
sed
指定したコマンドをファイルごと、行ごとに実行します。与えているコマンドは でs/Test_Dbv3/TestDbv3/g
、これは「正規表現の一致をTest_Dbv3
テキストTestDbv3
に置き換え、1 行に複数の置換を許可する」という意味です。元の-i.bak
ファイルを結果に置き換え、変更されていないバージョンをファイル名の末尾に.bak
.
s/_//g
すべてを消したいと仮定した場合の正規表現です_
。それ以外の場合は、正規表現を指定する方法を推測する必要があります:
たとえば、行の先頭にある場合はandに
置き換えs/^(Test|test)_/$1/g
ます。test_
test
Test_
Test
またはs/^(test)_/$1/gi
、すべてTEST_
のtEsT_
、 など に対してさらに機能します。
forperl -pi -e 's/.../.../gi'
または GNUsed
以上でのみ使用でき、sed
コマンドでは使用できない完全に大文字と小文字を区別しない一致が必要であると判断した場合 (変数のような$1
ものでさえありませんよね?)
のように始まるファイル名もあれば、あなたが言及したTest2_
or だけでなく、3〜10文字の長さの文字と数字のすべての組み合わせに一致させるために1EXPERIMENT_
使用することができ ます。s/^([A-Za-z0-9]{3,10})_/$1/g
Test
test
さらに具体的な正規表現については、「正規表現チートシート」を検索してください。単一のツールがすべてをサポートしているsed
場合やgrep
サポートしていない場合は、それらを使用することに決めたとしても不思議ではありません。
フォルダー内のファイルの名前を変更するだけで、その内容を編集しないコマンドが必要な場合は、
(rename 's/search/relace/' folder/*
サブディレクトリを一致させない) またはrename search replace folder/*
(名前の変更のバージョンに応じて) を試してください。