首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell脚本中使用vi命令?

如何在shell脚本中使用vi命令?
EN

Stack Overflow用户
提问于 2016-06-02 05:56:16
回答 5查看 14.9K关注 0票数 1

我使用的是CentOS 6.7

我希望通过vi打开test.txt并插入文本"hihi“,然后保存并退出vi。

代码语言:javascript
复制
#! /bin/bash

vi test.txt << 'END'
i
hihi
press ESC
w
q
END

像这样的结果

代码语言:javascript
复制
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

我怎么才能修好它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-02 06:12:26

创建或修改文本文件的方法有很多,从catsed、从awked。不过,我会假设,您有一个很好的理由想要使用vi

尝试以下命令:

代码语言:javascript
复制
echo $'ihihi\E:x\n' | vi test.txt

在操作中,这看起来像是:

代码语言:javascript
复制
$ echo $'ihihi\E:x\n' | vi test.txt
Vim: Warning: Input is not from a terminal
$ cat test.txt
hihi

我发现这种方法是脆弱的:如果vi遇到错误情况,就不会看到任何消息。

它是如何工作的

我们需要让vi看到转义字符。有很多方法可以做到这一点。我选择使用bash的$'...'字符串,因为它允许将转义输入为一个简单的两个字符串:\E。我们使用的步骤是:

  1. i引入了插入模式。
  2. 将四个字符hihi输入缓冲区。
  3. 转义,\E,退出插入模式。
  4. :x\n退出并保存。
票数 0
EN

Stack Overflow用户

发布于 2016-06-02 06:16:01

您不需要在这么简单的事情上使用vi。您可以使用echo。例如:

代码语言:javascript
复制
echo "hihi" > test.txt

如果你真的想做更复杂的事情,发布更多的细节。

票数 3
EN

Stack Overflow用户

发布于 2016-06-02 06:32:02

从bash调用vim:

代码语言:javascript
复制
vim test.txt +$'i\nhihi' +w +q

您可能还想查看"ed“。这是一个编辑器,具有类似于vi的命令,但实际上它是从脚本中调用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37583736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档