【问题标题】:Increment copies of a certain script name that is within another script using bash使用 bash 增加另一个脚本中某个脚本名称的副本
【发布时间】:2017-11-04 18:38:40
【问题描述】:

我有 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 ...和screening_regression100。 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

【问题讨论】:

  • 你最近做了什么?
  • 我没有太多,但我用我有的东西在上面进行了编辑。
  • 这是一个真的不好的方法。最好有一个仅包含可能更改的变量的文件,仅修改该文件,并让其他脚本读取它。这样您就可以将脚本(手动编写,永不更改)和数据文件(可能更新)分开。

标签: bash loops sed increment


【解决方案1】:

您可以像这样使用 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 不会出错,它只是没有像我想要的那样在文件末尾添加数字......珍珠命令给出了与先前评论相同的错误。
猜你喜欢
  • 1970-01-01
  • 2023-01-13
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多