此处突出显示的语法应该是您的问题所在的一个很好的指标——您已经将几个字符串与不在字符串中的内容粉碎在一起。尝试替换这个:
cq_fname="%let outputfile="/user/cq_"$1".csv";"
有了这个:
cq_fname="%let outputfile=\"/user/cq_$1.csv\";"
我用字符转义了"
字符串内部,\
并删除了"
感觉文件名中可能不存在的字符。
Alok 建议对替换命令使用不同的字符——这是必要的。
此外,您需要在赋值和字符串中使用相同的变量名。(哦!)
最后的脚本是:
#!/bin/bash
cq_fname="%let outputfile=\"/user/cq_$1.csv\";"
sed "29s|.*|$cq_fname|" file1.sas > file2.sas
set -x
我通过添加到脚本的顶部找到了不匹配的变量名;它显示了脚本的执行输出。
破碎的:
$ ./replace
+ cq_fname='%let outputfile="/user/cq_.csv";'
+ sed '29s|.*||' file1.sas
固定的:
$ ./replace
+ cq_fname='%let outputfile="/user/cq_.csv";'
+ sed '29s|.*|%let outputfile="/user/cq_.csv";|' file1.sas
set -x
是一个极好的小调试工具,当你需要它的时候。