shell bash全局替换文件
我想知道如何对文件进行全局替换 基本上,我有一个包含多个属性的文件,我在这个文件中循环创建一个数组来存储每个属性值。属性值以以下格式存储:shell bash全局替换文件,bash,shell,replace,sed,grep,Bash,Shell,Replace,Sed,Grep,我想知道如何对文件进行全局替换 基本上,我有一个包含多个属性的文件,我在这个文件中循环创建一个数组来存储每个属性值。属性值以以下格式存储: $key=$value 所以我要做的是循环遍历我的属性数组,并用相应的值替换文件中的所有键。如果使用以下格式,则按键将高亮显示: [#$key#] 因此,我尝试在数组中循环,并对每个元素在我的文件中进行全局替换,方法是使用sed将键的所有实例(在[##]标记中)替换为该值,从而对临时文件进行分类。然后,我会将临时文件恢复为原始文件 然而,我所拥有的并不是
$key=$value
所以我要做的是循环遍历我的属性数组,并用相应的值替换文件中的所有键。如果使用以下格式,则按键将高亮显示:
[#$key#]
因此,我尝试在数组中循环,并对每个元素在我的文件中进行全局替换,方法是使用sed将键的所有实例(在[##]标记中)替换为该值,从而对临时文件进行分类。然后,我会将临时文件恢复为原始文件
然而,我所拥有的并不是替换所有元素,即不是全局替换
以下是我到目前为止的情况:
for x in "${props[@]}"
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/ > $TEMP_MY_FILE
cat $TEMP_MY_FILE > $MY_FILE
done
任何帮助都将不胜感激请尝试以下方法:
for x in "${props[@]}"
do
key='echo "${x}" | cut -d '=' -f 1
value='echo "${x}" | cut -d '=' -f 2
# global replace on the $MY_FILE
sed -i "s/#$key#/$value/g" $MY_FILE
done
sed-i
直接在文件中进行修改,而不使用临时文件增强h3nr1x的帖子我们可以尝试以下方法:
SED_CMD=""
for x in "${props[@]}"
do
key=$(echo "${x}" | cut -d '=' -f 1)
value=$(echo "${x}" | cut -d '=' -f 2)
SED_CMD="${SED_CMD}s/#$key#/$value/g
"
done
# global replace on the $MY_FILE
sed -i "$SED_CMD" $MY_FILE
sed命令将仅在文件上直接执行一次。注意:在将值附加到SED\u CMD变量的语句中,结束双引号必须位于下一行的开头,以便在每个SED命令后插入新行。对于全局替换,请说
SED s/'\[\\\$key\]/$value/g
。