在文件上壳bash bash全局替换



我想知道如何在文件上进行全局替换,

基本上,我有一个包含多个属性的文件,然后循环通过此文件创建一个数组来存储每个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 命令之后插入新行。

相关内容

  • 没有找到相关文章