我想自动向配置文件中添加新的后端,但不知道如何做到这一点。文件的相关部分如下所示:
[backend]
backends = backend-1 backend-2
timeout = 10
connectionsperhost = 100
[backend-1]
url = https://somedomain.com
secret = 6135bcb7849ca1886e2de193
[backend-2]
url = https://anotherdomain.com
secret = 75048ad646a5af787cbbaaa3 我正在寻找一个简单的解决方案,以添加另一个带有特定网址和秘密的后端条目。
[backend-3]
url = https://adiffrentdomain.com
secret = 42349234238423424同时,将“后端-3”的名称附加到“后端”部分的“后端=”行中。
是否有一种方法可以使这个工作与sed或bash脚本通用?
谢谢您的帮助或提示!
发布于 2022-01-12 14:26:17
您可以使用awk尝试一种方法。它将一个后端条目添加到以后端开始的行中,并在后端块的最后一行之后(在connectionsperhost之后)附加一个带有给定信息的后端-x部分。
显然,它依赖于后端的条目是正确的,因为它不单独计算后端部分。
url="www.domain.com"
s=9283283h4923h42934
% awk -v url="${url}" -v s="${s}" '/^backends/{x=NF-1; $0=$0" backend-"x}
/^connectionsperhost/{ print; $0="\n[backend-"x"]\nurl = "url"\nsecret = "s}
{print}' file
[backend]
backends = backend-1 backend-2 backend-3
timeout = 10
connectionsperhost = 100
[backend-3]
url = www.domain.com
secret = 9283283h4923h42934
[backend-1]
url = https://somedomain.com
secret = 6135bcb7849ca1886e2de193
[backend-2]
url = https://anotherdomain.com
secret = 75048ad646a5af787cbbaaa3数据
cat file
[backend]
backends = backend-1 backend-2
timeout = 10
connectionsperhost = 100
[backend-1]
url = https://somedomain.com
secret = 6135bcb7849ca1886e2de193
[backend-2]
url = https://anotherdomain.com
secret = 75048ad646a5af787cbbaaa3 发布于 2022-01-12 14:29:41
使用sed
$ sed '/backends =/s/$/ backend-3/;/^\[backend-2/{N;N;s|secret.*|&\n\n[backend-3] \
url = https://adifferentdomain.com \
secret = 42349234238423424|}' input_file
[backend]
backends = backend-1 backend-2 backend-3
timeout = 10
connectionsperhost = 100
[backend-1]
url = https://somedomain.com
secret = 6135bcb7849ca1886e2de193
[backend-2]
url = https://anotherdomain.com
secret = 75048ad646a5af787cbbaaa3
[backend-3]
url = https://adiffrentdomain.com
secret = 42349234238423424如果输入来自变量,则需要使用双引号来展开变量。例如;
sed "/backends =/s/$/ backend-3/;$a\\n[backend-3] \
url = $url_input \
secret = $secret_input" input_file发布于 2022-01-12 15:03:22
将awk用于任意的新后端条目,其中newbackendname、url和secret是唯一提供的输入。只需将新的后端添加到backends =-list和相应的块中,直接在通用[backend]-block之后。
awk -vnewentry="newbackendname" -vurl="http://new.url" -vsecret="secret123" '
#in backends= line: add new entry (at first position)
#and set `add` marker
/^backends =/{sub(/^backends = /,"&"newentry" ",$0) ; add=1}
#marker exists and empty line (end of header block) is found:
#print new entry and unset marker `add`
add && /^$/{ print "\n["newentry"]"
print "url = "url
print "secret = "secret
add=0}
#print by default
1' infile.txt希望这些评论能使我们更容易理解。使用这段代码,您可以通过shell变量添加url和awk -vurl="$URL" -vsecret="$SECRET" -vnewentry="$NEWBACKEND" '...' infile.txt。
https://stackoverflow.com/questions/70682459
复制相似问题