Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash增加另一个脚本中某个脚本名称的副本_Bash_Loops_Sed_Increment - Fatal编程技术网

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

使用bash增加另一个脚本中某个脚本名称的副本,bash,loops,sed,increment,Bash,Loops,Sed,Increment,我有100个不同的脚本名为run_1.scr…run_100.scr。在每个脚本中,我都有一行代码,上面写着: python screening_regression.py 我想在bash(或从命令行)中创建一些代码,将run_1.scr的screening_regression.py名称更改为screening_regression1.py,run_2.scr的screening_regression2.py。。。并筛选运行100.scr的回归100.py。我不确定是否有一个简单的命令可以

我有100个不同的脚本名为run_1.scr…run_100.scr。在每个脚本中,我都有一行代码,上面写着:

python screening_regression.py 
我想在bash(或从命令行)中创建一些代码,将run_1.scr的screening_regression.py名称更改为screening_regression1.py,run_2.scr的screening_regression2.py。。。并筛选运行100.scr的回归100.py。我不确定是否有一个简单的命令可以让我循环所有运行_1.scr…运行_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

您可以像这样使用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

您可以像这样使用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

你现在都干了些什么?我没有多少,但我用我的资料编辑了上面的内容。这是一个非常糟糕的方式。最好让一个文件只包含可能发生变化的变量,只修改该文件,然后让另一个脚本读取它。这样,您就可以将脚本(手动编写,从不更改)和数据文件(可能已更新)分开。您现在有什么进展?我没有多少,但我用我的现有内容编辑了上面的内容。这是一种非常糟糕的方式。最好让一个文件只包含可能发生变化的变量,只修改该文件,然后让另一个脚本读取它。这样,您就可以将脚本(手动编写,从不更改)和数据文件(可能已更新)分开。我以前从未使用过类似的东西,所以对我来说它看起来很陌生。我在bash脚本中使用它吗?只需从命令行运行它,或者你可以将它放入脚本中,如果你愿意,给我一点时间,我将使用你的循环而不是find来编写相同的脚本。这看起来不错。我将其复制到脚本中,得到一个错误:反斜杠在-e第1行,靠近“1\”(在\?之前缺少运算符)处找到运算符,语法错误在-e第1行,靠近“1\”,由于编译错误,-e的执行被中止。@HM14在一行上尝试所有操作,就像我的编辑一样,应该可以使用转义的反斜杠,所以我不确定到底发生了什么。嗯,我尝试了一个类似的,但得到了相同的错误…我用我所拥有的编辑了上面的代码,还研究了使用sed命令,但似乎不起作用。sed没有错误,只是没有像我所希望的那样在文件末尾添加数字……pearl命令给出了与前面评论相同的错误。我以前从未使用过类似的东西,因此它对我来说是陌生的。我在bash脚本中使用它吗?只需从命令行运行它,或者你可以将它放入脚本中,如果你愿意,给我一点时间,我将使用你的循环而不是find来编写相同的脚本。这看起来不错。我将其复制到脚本中,得到一个错误:反斜杠在-e第1行,靠近“1\”(在\?之前缺少运算符)处找到运算符,语法错误在-e第1行,靠近“1\”,由于编译错误,-e的执行被中止。@HM14在一行上尝试所有操作,就像我的编辑一样,应该可以使用转义的反斜杠,所以我不确定到底发生了什么。嗯,我尝试了一个类似的,但得到了相同的错误…我用我所拥有的编辑了上面的代码,还研究了使用sed命令,但似乎不起作用。sed没有出错,只是没有像我希望的那样在文件末尾添加数字……pearl命令给出了与前面注释相同的错误。