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

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

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

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


当前回答

使用“/”字符替换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'

文件操作通常不是由Bash完成的,而是由Bash调用的程序完成的,例如:

perl -pi -e 's/abc/XYZ/g' /tmp/file.txt

-i标志告诉它进行就地替换。

有关详细信息,请参阅man perlrun,包括如何对原始文件进行备份。

对于MAC用户,如果你没有读评论的话:)

正如@Austin提到的,如果您得到无效的命令代码错误

对于就地替换,BSD sed要求在-i标志之后添加一个文件扩展名,以保存到具有给定扩展名的备份文件中。

Sed -i '.bak'的/find/replace' /file.txt

如果您想跳过备份,可以使用“空字符串”。

Sed -i " 's/find/replace' /file.txt

这都是奥斯汀的功劳

Bash与其他shell一样,只是一个协调其他命令的工具。通常您会尝试使用标准的UNIX命令,但当然您可以使用Bash调用任何东西,包括您自己编译的程序、其他shell脚本、Python和Perl脚本等。

在这种情况下,有几种方法可以做到这一点。

如果你想读取一个文件,并将其写入另一个文件,执行搜索/替换,使用sed:

    sed 's/abc/XYZ/g' <infile >outfile

如果你想就地编辑文件(就像在编辑器中打开文件,编辑它,然后保存它),向行编辑器'ex'提供指令

    echo "%s/abc/XYZ/g
    w
    q
    " | ex file

示例就像没有全屏模式的vi。您可以向它输入与vi的:prompt相同的命令。

您也可以在bash脚本中使用python。我在这里的一些顶级答案上没有太大的成功,并且发现这个不需要循环就能工作:

#!/bin/bash
python
filetosearch = '/home/ubuntu/ip_table.txt'
texttoreplace = 'tcp443'
texttoinsert = 'udp1194'

s = open(filetosearch).read()
s = s.replace(texttoreplace, texttoinsert)
f = open(filetosearch, 'w')
f.write(s)
f.close()
quit()