修改数字字符并自动运行文件

时间:2015-07-18 10:05:02

标签: macos bash file sed

我有一个名为R_0的目录,其中我存储了一个文件R_0.py,它在当前目录中创建了许多文件并写入其中。

我想自动运行这个py文件,创建另一个目录R_1,将R_0.py复制到该目录并将其重命名为R_1.py,但在运行R_1.py之前,我需要修改其中的一些数字字段。完成后,我需要再次重复该任务(目录R_2包含文件R_2.py等。)

我需要这样做20次,所以我最终有20个名为R_1,R_2,...,R_20的目录。

我之前从未使用过脚本shell(我只知道ls,cd,mv和其他几个基本命令),但我认为执行这个20步任务的最佳方法是编写一个。

假设我们有这个R_0.py初始文件(实际上它是一个更复杂的文件,但我认为这对解决问题并不重要):

var re = /((sam)(?:wise)?)/;
var m = 'samwise'.match(re); // gives ["samwise", "samwise", "sam"]
var m = 'sam'.match(re);     // gives ["sam", "sam", "sam"]

所有其他py文件之间的区别在于数字2:在文件R _ $ {i} .py中,我需要dummy = 2 ,其中expr(i)是通过执行某些算术获得的另一个数值对i的操作,而不是dummy = expr(i)

我在dummy = 2 langage:

中写了一个.sh文件
bash

问题是我的命令#!/bin/bash for i in $(seq 1 20) do mkdir "/Users/usersos/Desktop/R_${i}" ; cp "/Users/usersos/Desktop/R_0/R_0.py" "/Users/usersos/Desktop/R_${i}" ; cd "/Users/usersos/Desktop/R_${i}" ; mv R_0.py R_${i}.py ;   argument1=$((60000+150*i)) ; sed 's/dummy = 2/dummy = ${argument1}/g' R_${i}.py ; python R_${i}.py ; done 没有写出正确的内容:在我的R _ $ {i} .py文件中,我找到了sed而不是dummy = ${argument1},i = 2实例。

我通过互联网搜索并找到了工具dummy = 60300,但我也没有成功。

1 个答案:

答案 0 :(得分:0)

正确的脚本如下:

#!/bin/bash
for i in $(seq 1 20) do
  mkdir "/Users/usersos/Desktop/R_${i}" ;
  cp "/Users/usersos/Desktop/R_0/R_0.py" "/Users/usersos/Desktop/R_${i}" ;
  cd "/Users/usersos/Desktop/R_${i}" ;
  mv R_0.py R_${i}.py ;  
  argument1=$((60000+150*i)) ;
  sed -i.bak "s/dummy = 2/dummy = ${argument1}/g" R_${i}.py ;
  python R_${i}.py ;
done

区别在于sed命令。我使用-i.bak代替-i,因为我正在使用Mac。这将创建一个新文件R _ $ {i} .py.bak。在linux上,我认为放-i就足够了。