首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash脚本中运行vi并执行vi命令以编辑另一个文件

在bash脚本中运行vi并执行vi命令以编辑另一个文件
EN

Stack Overflow用户
提问于 2014-02-25 20:53:50
回答 3查看 29.4K关注 0票数 6

所以我做了一个脚本,它从许多不同的文件中收集数据:

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

mkdir DATAPOOL"$1"

grep achi *out>runner
grep treat *out>>runner

cat runner | grep Primitive *gout | grep '=   '|awk '{print $1,$6}' > CellVolume"$1".txt 
cat runner | grep ' c ' *gout | grep 'Angstrom   '|awk '{print $1,$3}' > Cellc"$1".txt 
cat runner | grep 'Final energy ' *gout |awk '{print $1,$5}' > CellEnergy"$1".txt

等等等等

代码语言:javascript
复制
cat runner |awk '{print "~/xtlanal",$1," > ",$1}' >runner2
vi runner2
:1,$s/gout:/xtl/
:1,$s/gout:/dat/
:wq

source runner2

grep Summary *dat | grep 'CAT-O  ' |awk '{print $1,$6}' > AVE_NaO_"$1".txt

mv *txt DATAPOOL"$1"

因此,当我在没有vi部分的情况下运行时,我最终得到了所有需要的文本文件,所以我知道所有这些都是可以工作的。此外,当我使用vi命令运行它时,它只是在vi命令处停止运行,然后我可以手动输入这3个命令,最终得到正确的结果。我正在苦苦挣扎的是,我不能让vi自己运行命令,所以我可以在不同的目录中多次执行文件,而不必一次又一次地手动输入命令。

任何帮助都将不胜感激。

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:09:02

对于脚本编辑任务,您可以使用ed而不是vi:

代码语言:javascript
复制
ed runner2 <<'END'
1,$s/gout:/xtl/
1,$s/gout:/dat/
w
q
END

对于面向全局行的搜索和替换,sed是一个很好的选择:

代码语言:javascript
复制
sed -i 's/gout:/xtl/; s/gout:/dat/' runner2
票数 8
EN

Stack Overflow用户

发布于 2015-03-13 01:38:34

类似以下内容的bash脚本:

代码语言:javascript
复制
#!/bin/bash
vi filename.txt -c ':g/^/m0' -c ':wq'

其中-c执行命令。这里的命令是反转文本文件中的行。完成后,按:wq保存并退出。(man vi获取有关-c的更多信息)

如果你不想输入两次-c,你可以这样做:

代码语言:javascript
复制
vi -c "g/^/m0 | wq" filename.txt
票数 11
EN

Stack Overflow用户

发布于 2021-01-09 03:02:03

在VIM - Vi IMproved 8.0上测试(2016 Sep 12,compiled Apr 10 2018 21:31:58)

vi -c "g/^/m0 | wq“filename.txt可能看起来可以工作,但实际上并非如此!

键入vi -c "g/^/m0 | wq“filename.txt将导致vi在对文件进行任何重大更改之前写入并退出。(在这种情况下使用管道将尝试逐行执行wq,强制它在预期操作之前退出)

为了看演示,试着输入不带q的代码,看看逐行写的速度有多慢:

代码语言:javascript
复制
vi -c "g/^/m0 | w" filename.txt

更有效的方法是使用-c作为B.Kocis状态,或使用+。

正如B. Kocis所说:

代码语言:javascript
复制
#!/bin/bash
vi filename.txt -c ':g/^/m0' -c ':wq'

代码语言:javascript
复制
vi filename.txt +g/^/m0 +wq
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22014830

复制
相关文章

相似问题

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