2017-06-03 9 views
0

run_1.scr ... run_100.scrという100種類のスクリプトがあります。 run_1.scrためscreening_regression1.pyするscreening_regression.pyの名前を変更しますbashを使用して別のスクリプト内にある特定のスクリプト名のコピーを増やす

python screening_regression.py 

を私はbashでいくつかのコードを作成したい(またはコマンドラインから)になります。各スクリプトの中で私が言うのラインを持っていますrun_2.scr ...のscreening_regression2.py、run_100.scrのscreening_regression100.pyがあります。 run_1.scr ... run_100.scrのすべてのファイルをループする簡単なコマンドがあるかどうかはわかりません。それぞれのファイルに入り、各スクリプトがあるpythonスクリプト名を増やしてもらうようにします呼び出し。何か案は?

は、これまでのところ、私はファイルだけをループコードの部分を持っているが、私は、各ファイルに行くと、私が説明した方法でPythonスクリプトの名前を変更するかどうかはわからない:

#!/bin/bash 
#for filename in /Data/run_*.scr; do 
    #go into file and change screening_regression.py to screening_regression1.py 
    #for the first file and then screening_regression2.py for second file etc. 
#done 

#num=1 
for f in /home/mitche34/WIND_MOS/sub/run_screening_*.scr; do 
    #sed -i -e 's/(python screening_regression_1yr.py)/(python screening_regression_1yr$num.py)/g' "$f" 
    perl -i -lpe '($n)=$ARGV=~/\d+/g if $.==1\s/(python screening_regression_1yr)(.py)/$1$n$2/' "$f" 
    #num=num+1 
done 
+0

これまで何をしていますか? – 123

+0

私はあまり持っていませんが、私は私が持っているもので上記を編集しました。 – HM14

+0

これは本当に悪い方法です。潜在的に変化する変数だけを含むファイルを作成し、そのファイルのみを変更し、他のスクリプトがそれを読み込ませるようにするのがよいでしょう。そうすることで、スクリプト(手作業で書かれたもの、決して変更されないもの)とデータファイル(潜在的に更新されたもの)を別々にしておくことになります。 –

答えて

2

ます

1行にそう

find . -name "*.scr" -exec perl -i -lpe '($n)=$ARGV=~/\d+/g if $.==1\ 
s/(python screening_regression)(.py)/$1$n$2/' {} \; 

のようにインプレース編集で見つけ使うとPerlができ

find . -name "*.scr" -exec perl -i -lpe '($n)=$ARGV=~/\d+/g if $.==1;s/(python screening_regression)(.py)/$1$n$2/' {} \; 

または元のループを使用する

#!/bin/bash 
for f in /Data/run_*.scr; do 

perl -i -lpe '($n)=$ARGV=~/\d+/g if $.==1\s/(python screening_regression)(.py)/$1$n$2/' "$f" 

done 
+0

私はこの前にこのようなものを使ったことがないので、私には外見になります。これをbashスクリプトで使用しますか? – HM14

+0

ちょうどコマンドラインから実行するか、必要に応じてスクリプトに入れることができます。私はあなたのループを使用してfindの代わりに同じものを書きます。 – 123

+0

これは良いですね。これを私のスクリプトにコピーしてエラーが発生しました:-e行1、 "1 \"の近くにオペレータが期待したところにバックスラッシュが見つかりました -e行1、 "1"に近い構文エラー コンパイルエラーのために-eの実行が中止されました。 – HM14

関連する問題