Linux 用列表中的单词替换多个文件中的字符串
我有多个文件夹(rep0到rep6),每个文件夹中都有一个名为“file.mdp”的文件。 在“file.mdp”中,我想用另一个字符串替换字符串“315”,如下所示: 字符串“315”将替换为此列表中的不同值:300.00332.18366.98404.54445.26489.27536.92,以便: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
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