Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
Shell 如何替换文件中的字符串并在循环后运行命令_Shell_Vim - Fatal编程技术网

Shell 如何替换文件中的字符串并在循环后运行命令

Shell 如何替换文件中的字符串并在循环后运行命令,shell,vim,Shell,Vim,我想替换名为link.j的文件中的一行,然后运行一个程序,当程序完成后,我想再次运行它,但对link.j文件进行不同的替换,就像在循环中对我指定的所有值进行替换一样 所以为了替换我做的一行 sed -i '' -e '3 s/0.5/0.1/' link.j 然后跑 copy.sh 因此,我将第三行的值从0.5替换为0.1。现在,我想继续这样做,但对于从0.1到1.0的值,间隔0.1,因此0.1,0.2…1.0,始终在后面运行代码 我运行的代码将刚刚修改的文件复制到一个新的子文件夹中,因此我

我想替换名为
link.j
的文件中的一行,然后运行一个程序,当程序完成后,我想再次运行它,但对
link.j
文件进行不同的替换,就像在循环中对我指定的所有值进行替换一样

所以为了替换我做的一行

sed -i '' -e '3 s/0.5/0.1/' link.j
然后跑

copy.sh
因此,我将第三行的值从
0.5
替换为
0.1
。现在,我想继续这样做,但对于从
0.1
1.0
的值,间隔
0.1
,因此
0.1,0.2…1.0
,始终在后面运行代码

我运行的代码将刚刚修改的文件复制到一个新的子文件夹中,因此我希望在再次运行替换之前保存这些文件夹

sh脚本如下所示

for dir in `ls -d ../files/files-12/??`
do

id=`echo $dir | awk -F/ '{print $4}'`
mkdir $id

cp ../stack/*/${id}/rf* .
done

您可以循环使用可能的替换字符串,如下所示:

0.{1..9}1.0中n的
;做
sed-i'-e“3s/0\.5/$n/”link.j
/copy.sh
完成
请注意,我在
0.5
中跳过了句点;否则,它将匹配任何字符

扩张是一种巴什主义;如果不使用Bash,则可能会有
seq
(也是非POSIX):

以美元表示的n的
(seq 0.1 0.1 1.0);做
对于POSIX合规性,您可以使用awk:


<代码>对于n,单位为$(awk'开始{for(i=0.1;i
copy.sh
是什么样子的?脚本和sed命令可能会简化。很抱歉响应太晚。回答您的问题时,copy.sh只是一个小脚本,其中我将文件从上面的文件夹复制到这个包含多个子文件夹的文件夹中。我将对其进行编辑,因为我对此有问题您提供的脚本是我的错,因为我没有首先显示copy.sh。但是这样,link.j文件只保留0.1的值,而且之后它不会保存文件。我的想法是,我将运行脚本,它将生成一个link.j文件,该文件将由copy.sh脚本使用,然后我将运行此脚本再次,但将其保存在另一个文件夹中。否则,我将手动单独替换
0.5
,并将文件夹存储在其他位置