如何使用vim远程编辑更新文本文件?

问题描述 投票:0回答:1

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

谁能告诉我用ssh不可能吗?

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

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

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

谢谢。

linux bash ubuntu vim redhat
1个回答
1
投票

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

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

sed 是一个标准的Unix命令,所以它应该是可用的。 如果你需要更复杂的东西,你可以用以下命令来做 perl -iruby -i,这也是擅长的。 A /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更不常见,因为它通常只作为Vim的依赖关系安装。patch而大多数服务器会有一些版本的 exvi 为系统管理员的利益而安装。


0
投票

作为一个替代方案,考虑将文件带到本地,在你的本地机器上准备更新版本,然后发送更新。这将允许你在发送更新版本之前测试它 - 风险更小,更好的睡眠。

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

  3. 更新远程系统

cat list-of-servers | xargs -I{} sh -c 'scp $1-FILE $1:/path/to/FILE' -- {}
© www.soinside.com 2019 - 2024. All rights reserved.