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

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

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

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


当前回答

使用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,然后在;我们又在做同样的事情

其他回答

要以非交互式方式编辑文件中的文本,需要就地文本编辑器,例如vim。

下面是一个简单的例子,如何从命令行使用它:

vim -esnc '%s/foo/bar/g|:wq' file.txt

这相当于ex editor的@slim answer,基本上是一样的。

这里有一些实际的例子。

在文件中用bar替换文本foo:

ex -s +%s/foo/bar/ge -cwq file.txt

删除多个文件的尾随空格:

ex +'bufdo!%s/\s\+$//e' -cxa *.txt

故障处理(终端卡死):

添加-V1参数以显示详细消息。 强制退出:-cwq!

参见:

如何非交互地编辑文件(例如在管道中)?在Vi SE

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完成的,而是由Bash调用的程序完成的,例如:

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

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

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

你也可以使用ed命令进行文件内搜索和替换:

# delete all lines matching foobar 
ed -s test.txt <<< $'g/foobar/d\nw' 

参见“使用ed通过脚本编辑文件”。

使用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,然后在;我们又在做同样的事情