我对bash和其他一些人很新,而且我已经在网上找到了很多解决方案来做我需要的东西,但我正在寻找最佳方式。
有些人使用sed
,有些人使用find
。
我正在尝试查找并替换目录中所有文件中的内容(递归)。
有关如何操作或在哪里查看的任何建议?
修改
我知道,现在,这与SSH没有直接关系,但它是我寻找答案的地方,我觉得其他人也可能在同一个地方。
答案 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' {} \;