gpt4 book ai didi

linux - 用 SED 替换占位符

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:11 24 4
gpt4 key购买 nike

我正在尝试用属性文件中的值替换 html 文件中的 [[****]] 占位符。

输入文件中的示例内容:

<html>
<host>[[my_host]]</host>
<port>[[my_port]]</port>
</html>

属性文件中的示例内容:

my_host=linkcmb.com
my_port=8080

我当前的脚本:

#/bin/sh

property_file=$1
input_html=$2
output_html=$3

IFS="="
while read k v || [[ -n "$k" ]]; do
test -z "$k" && continue
declare $k=$v
done <"$property_file"

eval "$(sed 's/\[\[\([^]]\+\)\]\]/${\1}/g' $input_html) >$output_html";

错误:Html 标签也正在评估导致错误。

./some.sh: line 32: html: No such file or directory
./some.sh: line 33: host: No such file or directory
./some.sh: line 35: /host: No such file or directory
....
....

任何建议将不胜感激。谢谢。

最佳答案

您可以将 while 循环替换为

. "$property_file"

不过,我不喜欢eval,你不需要声明这些设置。
你想要像这样的 sed 命令

sed '/=/ s/\([^=]*\)=\(.*\)/s#\\\[\\\[\1\\\]\\\]#\2#g/' "$property_file"

很多反斜杠,[[]] 是一个艰难的选择。
您可以通过进程替换来使用这些命令:

sed -f <(
sed '/=/ s/\([^=]*\)=\(.*\)/s#\\\[\\\[\1\\\]\\\]#\2#g/' "$property_file"
) "${input_html}"

关于linux - 用 SED 替换占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com