2009-04-21 162 views
3

我正在编写一个shell脚本来编辑 aegis的Change-Set属性。该 命令我使用的是:开辟了一个vi编辑器在shell脚本中使用变量sed

aegis -Change_Attributes -Edit 

进行 了变化。我想做一个搜索 和替换:

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

\“测试\”/g的

我可以通过这些直接通过脚本打开 VI实例,而不 打字它的任何?我想在编辑它之后保存 文档(:wq)。

P.S.该文件是在执行命令时使 我不知道原来的路径

编辑创建的临时文件 :我用过可以的sed在这种情况下:

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

\“测试\“\;/G”

溶液(不雅劈??)将 是 ”猫“ 由主持 输出(SETENV VISU AL猫),修改了 放流与上面的命令和 保存到临时文件,并使用:

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以评估其实际值?

EDIT3:

使用

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

工作。我用%替换正常的分隔符(/),并将环境变量放在双引号中。

回答

5

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

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

+0

如果我用猫与SED修改输出,就会将更改保存到文件? – Gayan 2009-04-21 11:01:26

+0

不,您必须将sed的输出重定向到某处,在这种情况下,请将其重定向到临时文件。然后,编辑完成后,删除原始文件并重命名临时文件。 – 2009-04-21 11:03:21

0

我不认为香草vi会这样做,尽管vim可能能够在自定义.vimrc的控制下完成此操作。更好的方法是用sed进行更改,然后在结果上打开vi。

2

如果您通过-c选项传递了所需的命令,则vi将在开始编辑会话后立即执行命令,例如,

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

糟糕。我忘了说这个命令被解释为一个“ex”命令,即在冒号,所以你提供的命令应该可以工作。

HTH

欢呼声,