Fel*_*xJN 1 scripting bash sed variable-substitution variable
直接在命令行上,这有效:
$sed "s/a/X/;s/X/&a&/" file
Run Code Online (Sandbox Code Playgroud)
使用 shell 变量也是如此:
$varin=a ; varout=X ; sed "s/$varin/$varout/;s/$varout/&$varin&/" file
Run Code Online (Sandbox Code Playgroud)
但是使用外部脚本文件
$sed -f script.sed file
Run Code Online (Sandbox Code Playgroud)
只有“硬编码”方法才有效
$cat script.sed
s/a/X/
s/X/&a&/
Run Code Online (Sandbox Code Playgroud)
虽然 shell 变量没有扩展
$cat script.sed
s/$varin/$varout/
a/$varout/&$varin&/
$varin=a ; varout=X ; sed -f script.sed file
#-> variables in script.sed not interpreted; output unchanged
Run Code Online (Sandbox Code Playgroud)
如何实现外部脚本文件中shell变量的解释sed?
我很明白它sed本身无法解释 shell 变量,但是我如何预处理脚本(以保存方式)以一次运行它来bash解析变量?sed也许人们可以在一开始就使用命令将它们导入?
以下方法没有成效(使用bash):
export varin=a ; export varout=Xsed -e $(cat sed.script) file:适用于单行脚本,在多行脚本上失败,即使注释作为第一行sed -f <(cat script.sed) fileeval sed -f script.sed file您可以envsubst在运行之前将脚本中的变量替换为预期值sed。
$ cat script.sed
s/$varin/$varout/
s/$varout/&$varin&/
Run Code Online (Sandbox Code Playgroud)
将字符串$varinor${varin}和$varoutor ${varout}in替换script.sed为其变量值:
$ varin='a' varout='X' envsubst '$varin $varout' <script.sed
s/a/X/
s/X/&a&/
Run Code Online (Sandbox Code Playgroud)
sed使用进程替换的命令:
sed -f <(varin='a' varout='X' envsubst '$varin $varout' <script.sed) file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |