SSH - 递归查找和替换

时间:2011-08-10 05:56:39

标签: bash ssh sed

我对bash和其他一些人很新,而且我已经在网上找到了很多解决方案来做我需要的东西,但我正在寻找最佳方式。

有些人使用sed,有些人使用find

我正在尝试查找并替换目录中所有文件中的内容(递归)。

有关如何操作或在哪里查看的任何建议?


修改

我知道,现在,这与SSH没有直接关系,但它是我寻找答案的地方,我觉得其他人也可能在同一个地方。

3 个答案:

答案 0 :(得分:5)

find . -type f | xargs -d "\n" perl -pi -e 's/search/replace/g'

find . -type f - >这会以递归方式查找当前目录中的所有文件。

xargs -d "\n" - >这将使上述命令输出中的每一行成为下一部分的参数。

perl -pi -e 's/search/replace/g' --->这将从上面的命令获取输入并处理每个文件以找到字符串并替换它。

答案 1 :(得分:1)

“replace”是mysql附带的命令。对于mysql的命令有点奇怪我同意。大多数Linux发行版已经安装了mysql,或者只需点击几下就可以安装它。

语法如下:将from1替换为1 to2 to2 - file1 file2 ...

from1被替换为to1,而from2被替换为to2。 你可以有任意数量的对。要仅将from1替换为to1:将from1替换为1 - file1 file2 ...

file1 file2 ...是要搜索和替换的文件列表。 如果你想要在递归上执行搜索和替换的目录中,你可以:将from1替换为1 - $(find -type f)

$()执行括号内的命令并将其打印结果作为参数插入。回车符替换为空格。

所以,让我们说把所有出现的单词“Mike”替换成单词“Joe”,然后你就在你希望开始的目录中,并递归地考虑所有文件:

取代Mike Joe - $(find -type f)

答案 2 :(得分:1)

find可以在单个命令(无管道)中与其他程序(如perl)结合使用。 基本上find会为每个匹配的文件执行perl。

find . -type f -exec perl -pi -e 's/search/replace/g' {} \;