String shell bash,cat文件,同时使用sed替换文本

String shell bash,cat文件,同时使用sed替换文本,string,shell,sed,grep,cat,String,Shell,Sed,Grep,Cat,在SO的帮助下,我已经能够更正我的sed命令,这样我就可以使用变量了(使用'而不是',没有使用g表示全局变量) 但是,我正在努力使命令正常工作 为了给您提供一些上下文,我有一个文件,其中包含许多行文本,有些行包含一个或多个标记。这些标记的格式如下: [#$key#] - i.e #[#] is used to indicate the presence of a key $key=$value 然后我有一个内部数组对象,它存储一个字符串值,该字符串值包含每个键和以下格式的对应值: [#$ke

在SO的帮助下,我已经能够更正我的sed命令,这样我就可以使用变量了(使用'而不是',没有使用g表示全局变量)

但是,我正在努力使命令正常工作

为了给您提供一些上下文,我有一个文件,其中包含许多行文本,有些行包含一个或多个标记。这些标记的格式如下:

[#$key#] - i.e #[#] is used to indicate the presence of a key
$key=$value
然后我有一个内部数组对象,它存储一个字符串值,该字符串值包含每个键和以下格式的对应值:

[#$key#] - i.e #[#] is used to indicate the presence of a key
$key=$value
我试图做的是在使用全局sed replace将$key替换为数组对象中相应的值的同时,对包含标记的文件进行cat

我的问题是我的grep/sed命令没有替换任何文本,我不知道为什么

这是我的密码:

for x in "${prop[@]}"
do
     key=`echo "${x}" | cut -d '=' -f 1`
     value=`echo "${x}" | cut -d '=' -f 2`


    # global replace on the $MY_FILE
    cat $MY_FILE | sed "s|\[#${key}#\]|${value}|g" > ${TEMP_MY_FILE}
    cat $TEMP_MY_FILE > $MY_FILE

 done

我考虑过使用sed-I,但我的版本似乎不支持-I

虽然
[/code>在双引号bash字符串中没有任何特殊意义,
\[/code>仍然计算为
[/code>,因为反斜杠被处理为允许转义美元符号。请尝试

sed "s|\\[#${key}#\\]|${value}|g"

作为您的
sed
命令。双反斜杠将导致向
sed
发送文字反斜杠,后者将使用它来转义
[
也要逐字处理。

无需
cat file | sed>new_file
。相反,请执行
sed…file>new_file
。设置
的行似乎也有问题,我认为这会导致一些错误。键和值变量与预期的一样,并没有回显它们o仔细检查在脚本开始时使用
set-x
,并以这种方式进行调试以供将来参考,
sed-i…inputfile
只是
sed…inputfile>tmpfile;mv tmpfile inputfile
的快捷方式。它只需显式地声明它即可…我的版本(在solaris上)不支持-我很抱歉,当我在脚本上使用set-xv时,它似乎会将grep中的$key字符串解释为[\\\e\x\a\m\p\l\e\uk\e\y\\\\]而不是[\\示例\u key]