在sed命令中使用变量(Use a variable in a sed command)

2019-06-25 16:26发布

我似乎不能在sed命令使用一个变量,例如:

sed "24s/.*/"$ct_tname"/" file1.sas > file2.sas

我想$ct_tname的变量,而不是从字面上$ct_tname ,这就是我不断收到。

任何人都知道如何得到这个工作?

这个问题实际上是更加复杂和我省略了一些信息。

ct_fname="%let outputfile="/user/ct_"$1".csv";"

在这里, $1是在我的bash脚本开始传入的参数(SED被bash脚本内运行)。

这不正常运行,但是它确实运行,如果我取代ct_fname

ct_fname="%let table=ct_$1;"

有没有办法让第一ct_fname要顺利通过?

Answer 1:

你需要用双引号( " ),而不是单引号( ' )。单引号字面上通过他们的内容,而无需翻译变量(扩大)。

尝试

sed "24s/.*/\"$ct_tname\"/" file1.sas > file2.sas

顺便说一句,如果你要来编辑文件(即如果file2.sas是一个临时文件),你应该使用ed代替。



Answer 2:

就我而言,我只是remplaced由双那些单引号:

for a in $(cat ext.cnf); do sed -n "/$a$/p" file1 >> file2; done

现在,它的工作好...



Answer 3:

您需要使用双( " )报价单( ' )引用变量的值不被替换既然你有你的替换文本双引号,需要转义:

sed "24s/.*/\"$ct_tname\"/" file1.sas > file2.sas


Answer 4:

壳牌变量不是单引号内扩展。 试试这个:

sed "24s/.*/\"$ct_tname\"/" file1.sas > file2.sas


Answer 5:

其他答案专注于他们的榜样使用转义双引号的。 请注意,这并不总是你想要什么:

$ FOO="auie"; echo foo123bar|sed "s/123/\"$FOO\"/"
foo"auie"bar
$ FOO="auie"; echo foo123bar|sed "s/123/$FOO/"
fooauiebar
$ FOO="auie"; echo fooauiebar|sed "s/\"$FOO\"/123/"
fooauiebar
$ FOO="auie"; echo fooauiebar|sed "s/$FOO/123/"
foo123bar


Answer 6:

问题是,当$ct_fname被取代, sed看到额外的/分离器,所以

sed "24s/.*/"$ct_tname"/" file1.sas > file2.sas

sed "24s/.*/"%let outputfile=/user/ct_ARGUMENT1.csv;"/" file1.sas > file2.sas

你会得到一个sed ,因为有5个错误/而不是预期的3。

取而代之的是,改变你sed分隔像一个未使用的字符|:和单一或双引号将工作得很好:

sed '24s|.*|'$ct_tname'|' file1.sas > file2.sas
sed "24s|.*|"$ct_tname"|" file1.sas > file2.sas


文章来源: Use a variable in a sed command