查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?

我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。

我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。

我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?


当前回答

你可以使用sed:

sed -i 's/abc/XYZ/gi' /tmp/file.txt

如果你不知道你的文件名,你可以使用find和sed:

find ./ -type f -exec sed -i 's/abc/XYZ/gi' {} \;

在所有Python文件中查找并替换:

find ./ -iname "*.py" -type f -exec sed -i 's/abc/XYZ/gi' {} \;

其他回答

使用sed命令替换文件中多个文本的最简单方法

命令- - - - - -

sed -i s#a/b/c#D/E#g;s#/x/y/z#D:/ x #g

在上面的命令s#a/b/c#D/E#g中,我用D/E替换a/b/c,然后在;我们又在做同样的事情

可以使用rpl命令。例如,你想改变整个php项目的域名。

rpl -ivRpd -x'.php' 'old.domain.name' 'new.domain.name' ./path_to_your_project_folder/  

这不是一个明确的bash的原因,但它是一个非常快速和有用的。:)

如果在多个文件中一起做更改,我们可以在一行中做:-

user_name='whoami'
for file in file1.txt file2.txt file3.txt; do sed -i -e 's/default_user/${user_name}/g' $file; done

补充如果万一可能有用。

使用“/”字符替换url时要小心。

如何做到这一点的例子:

sed -i "s%http://domain.com%http://www.domain.com/folder/%g" "test.txt"

摘自:http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

试试下面的shell命令:

find ./  -type f -name "file*.txt" | xargs sed -i -e 's/abc/xyz/g'