String shell bash,cat文件,同时使用sed替换文本
在SO的帮助下,我已经能够更正我的sed命令,这样我就可以使用变量了(使用'而不是',没有使用g表示全局变量) 但是,我正在努力使命令正常工作 为了给您提供一些上下文,我有一个文件,其中包含许多行文本,有些行包含一个或多个标记。这些标记的格式如下: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
[#$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]