使用bash增加另一个脚本中的某个脚本名称的副本

时间:2017-06-03 13:18:06

标签: bash loops sed increment

我有100个不同的脚本,名为run_1.scr ... run_100.scr。在每个脚本中,我都有一行说:

python screening_regression.py 

我想在bash(或命令行)中创建一些代码,这些代码会将opens_regression.py的名称更改为用于run_1.scr的screening_regression1.py和用于run_2.scr ...和screening_regression100的screening_regression2.py。 py for run_100.scr。我不确定是否有一个简单的命令只允许我循环遍历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

1 个答案:

答案 0 :(得分:2)

您可以使用find和perl进行就地编辑,如此

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

在一行

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