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

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

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

我可以用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

补充如果万一可能有用。

其他回答

要以非交互式方式编辑文件中的文本,需要就地文本编辑器,例如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脚本中使用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()

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

这是一篇旧文章,但对于任何想要使用变量的人来说,@centurian说单引号意味着不会展开任何内容。

获取变量的一个简单方法是做字符串拼接,因为这是通过在bash中并置完成的,以下应该工作:

sed -i -e "s/$var1/$var2/g" /tmp/file.txt

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

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

补充如果万一可能有用。