递归替换多个文件中的字符串

时间:2018-07-20 21:02:31

标签: bash sed find

我在一个非常大的文件夹结构中有多个名为dev.rc的文件。这些文件包含环境变量,例如:

...
FOO=bar
...

我想用字符串baz替换整个项目中的条形字符串

我试图通过管道传送一些bash命令,例如:findsed,但是我无法将替换后的字符串的内容保存在原始文件中。

3 个答案:

答案 0 :(得分:0)

使用globstar浏览文件:

#!/bin/bash

shopt -s globstar
for file in **/dev.rc; do
  sed -i "s/=bar/=baz/" "$file"
done

答案 1 :(得分:0)

我已经编写了一个简单的PHP脚本来为您完成此任务。 将其另存为.php文件,并在apache localhost中使用或以php身份运行 记住用您的信息编辑代码的最后一行

<?php
/*
THIS IS COMMENT SECTION TO HELP YOU
$filecount = How much files you have to replace
$location = Location of your file ; Example "usr/bk/file.txt"
$string = The string you want to replace
$newstring = The new string you want to put
*/


function replace($filecount,$location,$string,$newstring){
     for($i = 0; $i>= $filecount; $i++)
     $file = file_get_contents($location);
     file_put_contents($file,str_replace($string,$newstring,$file));
     }
}

/*
Remember to replace the variables of the function using "","",""
Below is an example calling the function, replace with your own:
*/

replace(10,"/usr/locationhere.zip","foo","bar","baz");

答案 2 :(得分:-1)

您可以使用for循环查找与文件名匹配的所有文件,然后执行简单的sed命令并保存内容,并具有自动字符串替换功能,如下所示:

for f in `find . -name dev.rc`; do      
  sed -i '' 's/bar/baz/g' $f
done

或者您也可以使用exec

find . -name 'dev.rc' -type f -exec sed -i '' 's/bar/baz/g' {} +