查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?
我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。
我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。
我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?
查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?
我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。
我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。
我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?
当前回答
对于MAC用户,如果你没有读评论的话:)
正如@Austin提到的,如果您得到无效的命令代码错误
对于就地替换,BSD sed要求在-i标志之后添加一个文件扩展名,以保存到具有给定扩展名的备份文件中。
Sed -i '.bak'的/find/replace' /file.txt
如果您想跳过备份,可以使用“空字符串”。
Sed -i " 's/find/replace' /file.txt
这都是奥斯汀的功劳
其他回答
你可以使用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,然后在;我们又在做同样的事情
如果你正在处理的文件不是很大,并且暂时将它存储在一个变量中是没有问题的,那么你可以在整个文件上使用Bash字符串替换—没有必要逐行检查它:
file_contents=$(</tmp/file.txt)
echo "${file_contents//abc/XYZ}" > /tmp/file.txt
整个文件内容将被视为一个长字符串,包括换行符。
XYZ可以是一个变量,例如$replacement,在这里不使用sed的一个好处是,您不必担心搜索或替换字符串可能包含sed模式分隔符(通常,但不一定是/)。缺点是不能使用正则表达式或sed的任何更复杂的操作。
使用“/”字符替换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
这是一篇旧文章,但对于任何想要使用变量的人来说,@centurian说单引号意味着不会展开任何内容。
获取变量的一个简单方法是做字符串拼接,因为这是通过在bash中并置完成的,以下应该工作:
sed -i -e "s/$var1/$var2/g" /tmp/file.txt