Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed,在引号中向前斜杠_Bash_Sed_Escaping_Quotes - Fatal编程技术网

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| | | |
技巧,并修复引用,您最终获得了全部内容