将变量传递给sed命令

时间:2017-07-11 16:24:28

标签: bash sed

我正在尝试在脚本中运行以下内容。它基本上在TXT之后用定义变量附加TXT_NEW。运行包含在小bash脚本中的脚本会引发错误:

sed:-e表达式#1,char 1:未知命令:`''

#!/bin/bash

user="Alpine"
new_user="Volverine"
file_name=file.txt

TXT="This Text is by $user"
TXT_NEW="This is owned by $new_dev"

sed -i "'/$TXT/a ${TXT_NEW}'" $file

为了解决问题,我使用如下方式回应了sed命令:

echo sed -i "'/$TXT/a ${TXT_NEW}'" $file

我看到变量正确扩展如下:

sed -i '/This Text is by Alpine/a This is owned by Volverine' file.txt

感谢有人可以看看并提供一些指示...

1 个答案:

答案 0 :(得分:2)

首先,您遇到双引号问题。外部双引号内的单引号使sed失败,因为它将第一个字符'作为无效命令读取。

所以,只需删除它们,您提供的示例应该起作用:

#!/bin/bash
user="Alpine"
new_user="Volverine"
file_name="file.txt"

TXT="This Text is by $user"
TXT_NEW="This is owned by $new_user"

sed -i "/$TXT/a ${TXT_NEW}" "$file_name"

但是,由于您的问题是将变量文本传递给sed append命令,因此您可以考虑使用追加文件命令,{{1像这样:

r <filename>

sed -i "/$TXT/r /dev/stdin" $file_name <<<"$TXT_NEW" 命令类似于r(追加文本),但它会从指定的文件中读取要追加的文本。如果我们要从a开始阅读(应该在/dev/stdin中使用),我们可以通过Connecting Azure SQL Database to Azure Search using indexers提供文字。

您应该做的另一件事来概括这是通过转义bash,{来处理“搜索字符串”变量sed中的$TXT正则表达式元字符{1}}和\。也许通过辅助函数/

&