3

我正在编写一个 shell 脚本来编辑 aegis 的 Change-Set 属性。我正在使用的命令是:

aegis -Change_Attributes -Edit

这将打开一个 vi 编辑器来执行更改。我想做一个搜索和替换:

s/brief_description \= \"none\"\;/brief_description \=

\"测试\"/g

我可以通过脚本将这些直接传递给打开的 vi 实例而不输入任何内容吗?我想在编辑后保存文档(:wq)。

PS该文件是执行命令时创建的临时文件所以我不知道原始路径

编辑:我可以在这种情况下使用 sed:

sed -e 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\

\"测试\"\;/g'

解决方案(不雅黑客??)将是“cat”来自aegis(setenv VISUAL cat)的输出,使用上述命令修改输出流并将其保存到临时文件,然后使用:

aegis -change_attributes -file <temp file>

EDIT2:我几乎让它工作了。但是我的使用方式有问题sed

我的脚本中有以下行:

sed -i 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ \"${DESC}\"\;/g' temp_next.txt

但是 $DESC 变量不会计算出它的值,并且输出如下:

Brief_description = "${DESC}";

如何将 DESC 传递给 sed 以评估其实际值?

编辑3:

使用

sed -i 's%brief_description\ \=\ \"none\"\;%brief_description\ \=\ \"'"$DESC"'\"\;%g' temp_next.txt

工作。我将普通分隔符 (/) 替换为 % 并将环境变量放在双引号中。

4

3 回答 3

5

您不需要知道路径 - 宙斯盾应用程序会提供。您需要更改环境变量,该变量指定 aegis 用于指向脚本的编辑器,并在该脚本中使用sed流编辑器执行您的编辑。

编辑:关于您的变量名扩展问题,将包含整个 sed 替换表达式的单引号集更改为双引号。变量替换由单引号关闭。

于 2009-04-21T10:51:25.137 回答
2

如果您通过 -c 选项传入所需的命令,则 vi 将在启动编辑会话后立即执行该命令,例如

vi -c 's/brief_description \= \"none\"\;/brief_description \= \"test\"/g' my_file

哎呀。我忘了说该命令被解释为“ex”命令,即在冒号处,因此您提供的命令应该可以工作。

高温高压

干杯,

于 2009-04-21T11:12:51.260 回答
0

我不认为 vanilla vi 会这样做,尽管 vim 可能能够在自定义 .vimrc 的控制下做到这一点。更好的方法是使用 sed 进行更改,然后在结果上打开 vi。

于 2009-04-21T10:51:26.600 回答