Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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
Linux 用列表中的单词替换多个文件中的字符串_Linux_String_Sed - Fatal编程技术网

Linux 用列表中的单词替换多个文件中的字符串

Linux 用列表中的单词替换多个文件中的字符串,linux,string,sed,Linux,String,Sed,我有多个文件夹(rep0到rep6),每个文件夹中都有一个名为“file.mdp”的文件。 在“file.mdp”中,我想用另一个字符串替换字符串“315”,如下所示: 字符串“315”将替换为此列表中的不同值:300.00332.18366.98404.54445.26489.27536.92,以便: in rep0, file.mdp, 315 will be replaced with 300.00 in rep1, file.mdp, 315 will be replaced with

我有多个文件夹(rep0到rep6),每个文件夹中都有一个名为“file.mdp”的文件。 在“file.mdp”中,我想用另一个字符串替换字符串“315”,如下所示:

字符串“315”将替换为此列表中的不同值:300.00332.18366.98404.54445.26489.27536.92,以便:

in rep0, file.mdp, 315 will be replaced with 300.00
in rep1, file.mdp, 315 will be replaced with 332.18
in rep2, file.mdp, 315 will be replaced with 366.98
...
and so on!
我以这种方式使用sed进行了尝试,但它只替换了rep0中的文件:

sed -i 's/315/300.00/g;s/315/332.18/g;s/315/366.98/g;s/315/404.54/g;s/315/445.26/g;s/315/489.27/g;s/315/536.92/g;/^\s*$/d' rep1/nvt.mdp rep2/nvt.mdp rep3/nvt.mdp rep4/nvt.mdp rep5/nvt.mdp rep6/nvt.mdp rep7/nvt.mdp 
我们用替换值填充数组

我们迭代索引(0-6),并使用sed替换每个文件中的值

我们用替换值填充数组

我们迭代索引(0-6),并使用sed替换每个文件中的值。

这可能适合您(GNU sed和parallel):

将要替换的值链接到其目录,并使用sed操作该目录中的每个文件。

这可能适用于您(GNU sed和parallel):


将要替换的值与其目录链接,并使用sed操作该目录中的每个文件。

请在您的问题中以代码的形式添加您的努力,这是非常鼓励的,谢谢。请在您的问题中以代码的形式添加您的努力,这是非常鼓励的,谢谢。谢谢$tink。我有两个问题:如果我想迭代一个不同的索引(1-7)或其他任何东西,我如何处理这个问题?第二个问题是:在file.mdp的某些行中,我有不同的“315”,例如:315 315 315在同一行上。此脚本仅更改一行中第一个出现的315,而不是同一行中的所有315。我不知道如何修改您的脚本以获得以下内容:/@FZJ来处理#1:do bash算术。我利用了bash从0开始计数的事实。如果目录以1开头,请在索引中添加1#2“将sed更改为
sed-i“s/315/${val[$i]}/g”
…这将处理一行中出现的任何315。谢谢$tink。我有两个问题:如果我想迭代不同的索引(1-7)或其他任何东西,我如何处理它?第二个问题是:在file.mdp的某些行中,我有不同的“315”“像这样:315在同一条线上。此脚本仅更改一行中第一个出现的315,而不是同一行中的所有315。我不知道如何修改您的脚本以获得以下内容:/@FZJ来处理#1:do bash算术。我利用了bash从0开始计数的事实。如果目录以1开头,请在索引中添加1#2“将sed更改为
sed-i”s/315/${val[$i]}/g”
…这将处理一行中出现的任何315。
#!/bin/bash
val=(300.00 332.18 366.98 404.54 445.26 489.27 536.92)
for i in ${!val[@]}; do
        sed -i "s/315/${val[$i]}/" rep${i}/file.mdp
done
parallel sed -i 's/315/{2}/g' {1}/file.mdp ::: rep{0..6} :::+ 300.00 332.18 366.98 404.54 445.26 489.27 536.92