Bash sed,在引号中向前斜杠
我正试图用Bash sed,在引号中向前斜杠,bash,sed,escaping,quotes,Bash,Sed,Escaping,Quotes,我正试图用sed在bash中做一些事情,这被证明是非常困难的 我有一个bash脚本,它的第一个参数是日期 代码希望更改文本文件中的一行以包含传递的日期。这是密码 #!/bin/bash cq_fname="%let outputfile="/user/cq_"$1".csv";" sed "29s/.*/\"$ct_fname\"/" file1.sas > file2.sas 这个脚本在第三行失败,我得到了一些关于一个乱码命令的信息。有人知道一个聪明的方法来让它工作吗?如何在sed
sed
在bash
中做一些事情,这被证明是非常困难的
我有一个bash
脚本,它的第一个参数是日期
代码希望更改文本文件中的一行以包含传递的日期。这是密码
#!/bin/bash
cq_fname="%let outputfile="/user/cq_"$1".csv";"
sed "29s/.*/\"$ct_fname\"/" file1.sas > file2.sas
这个脚本在第三行失败,我得到了一些关于一个乱码命令的信息。有人知道一个聪明的方法来让它工作吗?如何在
sed
中的引号中获得正斜杠?在其他每一组引号上,使用“(单引号)而不是“(双引号)。此处突出显示的语法应该是一个很好的指示问题所在--您已经将多个字符串与不在字符串中的内容组合在一起。请尝试替换以下内容:
cq_fname="%let outputfile="/user/cq_"$1".csv";"
为此:
cq_fname="%let outputfile=\"/user/cq_$1.csv\";"
我用\
字符转义了字符串中的“
,并删除了感觉文件名中可能不存在的”
字符
这是必要的
此外,您需要在赋值和字符串中使用相同的变量名
最后的脚本是:
#!/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
是一个极好的小调试工具,当您需要它时。您可以使用任何字符代替/
,所以只需选择一个不在$ct\fname
中的字符即可:
sed "29s|.*|\"$ct_fname\"|" file1.sas > file2.sas
这可能适合您:
cq_fname='%let outputfile="/user/cq_.csv";'
sed '29c\'"$cq_fname" file1.sas > file2.sas
单引号在
.sas
文件格式中可能不起作用,$1
需要由shell解释,因此我认为用'
替换外部引号也不起作用。所有参数扩展的结果应该是什么样的?澄清:基本上,我正在尝试替换file1.sa的第29行s与:%let outputfile=“/user/cq_20060104.csv";可能重复的Hrn。您能提供您想要的输入、命令和输出示例吗?在原始问题中添加了澄清。谢谢,再重复一次,我发现变量名不正确。通过使用Alok的s| | | |
技巧,并修复引用,您最终获得了全部内容