我想知道如何在文件上进行全局替换,
基本上,我有一个包含多个属性的文件,然后循环通过此文件创建一个数组来存储每个propety值。属性值以格式存储:
$key=$value
所以我要做的是循环循环我的属性数组,并用相应的值替换文件中的所有密钥。如果使用以下格式,则突出显示键:
[#$key#]
因此,我要做的是循环循环遍历数组,对于每个元素,请使用cat'cat'cat'cat of cat of cat of cat to 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 命令将仅在文件上直接执行一次。
Note :在语句上,将值附加到SED_CMD变量上,闭合双引号必须在下一行的开始,以便在每个 sed> sed> sed 命令之后插入新行。