我有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
答案 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