我正在编写一个shell脚本来编辑aegis的Change-Set属性.我正在使用的命令是:
Run Code Online (Sandbox Code Playgroud)aegis -Change_Attributes -Edit
这打开了一个vi编辑器来执行更改.我想做一个搜索并替换:
Run Code Online (Sandbox Code Playgroud)s/brief_description \= \"none\"\;/brief_description \=\ "测试\"/克
我可以通过脚本将这些直接传递给open vi实例而无需输入任何内容吗?我想在编辑后保存文档(:wq).
PS该文件是执行命令时创建的临时文件,因此我不知道原始路径
编辑:在这种情况下我可以使用sed:
Run Code Online (Sandbox Code Playgroud)sed -e 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\\ "测试\" \;/G"
解决方案(不优雅的黑客??)将"cat"来自aegis(setenv VISUAL cat)的输出,使用上述命令修改输出流并将其保存到临时文件,并使用:
Run Code Online (Sandbox Code Playgroud)aegis -change_attributes -file <temp file>
编辑2:我几乎得到了它的工作.但是我使用的方式存在问题sed
我的脚本中有以下行:
sed -i 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\ \"${DESC}\"\;/g' temp_next.txt
Run Code Online (Sandbox Code Playgroud)
但$ DESC变量不评估其值,输出值为:
brief_description ="$ {DESC}";
我怎样才能将DESC传递给sed,它会评估它的实际值?
EDIT3:
运用
sed -i 's%brief_description\ \=\ \"none\"\;%brief_description\ \=\ \"'"$DESC"'\"\;%g' temp_next.txt
Run Code Online (Sandbox Code Playgroud)
工作.我用%替换正常分隔符(/)并将环境变量放在双引号中.