我如何使用 vim 远程 edit/update 文本文件

How can I remotely edit/update a text file using vim

我必须在大约 200 个远程 Linux 服务器上更新一行。

有人可以告诉我使用 ssh 是否可行吗?

假设我在文本文件中有 5 行,我想更新第 3 行的命令,如下所示:

line 1
line 2 
line 3 # I want to update this line 
line 4
line 5

我将使用 ssh 远程使用什么命令来更新第 3 行或在其中添加更多文本?

谢谢。

有多种方法可以做到这一点。修改文件的最简单方法是使用 sed。所以如果你想在每个服务器上以某种方式修改第 3 行,你可以这样做:

cat list-of-servers | xargs -I{} ssh {} sed -i -e '3s/line/ligne/' FILE

sed 是一个标准的 Unix 命令,所以它应该可用。如果你需要更复杂的东西,你可以用 perl -iruby -i 来完成,它们也很擅长这个。 /usr/bin/perl 二进制文件(包含核心 Perl 模块的子集)将在所有 Debian 和 Ubuntu 系统上可用,因为它是基本软件包的一部分,但在 Red Hat 或 CentOS 系统上可能不可用。

如果你真的想用Vim来做,你可以;所有冒号命令在 ex 中都可用,您可以使用 ex 修改文件。请注意,此处通常不提供正常模式命令。所以你可以这样写:

cat list-of-servers | \
   xargs -I{} ssh {} 'echo '\''3s/line/ligne/ | wq'\'' | ex -s FILE'

在这种情况下,您可以只使用双引号而不是转义单引号,但在您的情况下这可能是不可能的,所以我已经演示了如何嵌套单引号,因为这很棘手。

请注意,ed 也可用于此目的,但实际上它在服务器上比 Vim 更不常见,因为它通常仅作为 patch 的依赖项安装,而为了系统管理员的利益,大多数服务器都会安装某些版本的 exvi

作为替代方案,请考虑将文件带到本地,在本地计算机上准备更新版本,然后发送更新。这将允许您在发送之前测试更新版本 - 风险更低,睡眠更好。

  1. 将所有文件复制到本地框(到主机名-FILE)
cat list-of-servers | xargs -I{} sh -c 'scp :/path/to/FILE -FILE' -- {}
  1. 在本地系统上进行更改
  2. 验证输出

  3. 更新远程系统

cat list-of-servers | xargs -I{} sh -c 'scp -FILE :/path/to/FILE' -- {}