在Shell脚本中使用带有sed的变量

Gay*_*yan 3 shell sed

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

aegis -Change_Attributes -Edit
Run Code Online (Sandbox Code Playgroud)

这打开了一个vi编辑器来执行更改.我想做一个搜索并替换:

s/brief_description \= \"none\"\;/brief_description \=
Run Code Online (Sandbox Code Playgroud)

\ "测试\"/克

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

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

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

sed -e 's/brief_description\ \=\ \"none\"\;/brief_description\ \=\
Run Code Online (Sandbox Code Playgroud)

\ "测试\" \;/G"

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

aegis -change_attributes -file <temp file>
Run Code Online (Sandbox Code Playgroud)

编辑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)

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

小智 5

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

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