我有一个配置文件xyz.conf,其中包含一些字段,我想根据用户的要求在它之间做一点改动。 (即错误,信息,调查,警告) 我怎么能用shell脚本呢?
实施例 我有以下几行
match => ["log_EventType", "ERROR"]
add_tag => [ "loglevelError" ]
if "loglevelError" in [tags] {
我想在
中更改这些行match => ["log_EventType", "DEBUG"]
add_tag => [ "loglevelDebug" ]
if "loglevelDebug" in [tags] {
到目前为止,我所尝试的是: match => [“log_EventType”,“INFO”]
对于这一行,我创建了一个脚本
file=xyz.conf
err=$1
sed -i 's/"ERROR.*/"'$err'/' $file
我只是运行命令./script.sh INFO
但在输出中我得到了
match => ["log_EventType", "INFO
在INFO
字后面不会返回右括号答案 0 :(得分:1)
显然,它只是:
sed -i 's/ERROR/DEBUG/; s/loglevelerror/logleveldebug/' filename
在你的情况下,在INFO这个词后面没有返回结束括号,
因为您不是ERROR
,而是ERROR.*
。这意味着您希望在单词ERROR
之后取代整行,而不仅仅是单词。
但我认为您想要处理一些额外的检查/条件, 你在这里没有提到。 请这样做,以便我们改进答案。
答案 1 :(得分:1)
此脚本解决了您的问题,让用户指定任何错误级别,并在整个conf文件中将其替换,无论文件首先出现在哪个错误级别:
list_item.xml
示例:
#!/bin/bash
file="xyz.conf"
err="${1,,}"
sed -i 's/\(match => \["log_EventType", "\)[^"]*/\1'${err^^}'/g; s/\("loglevel\)[^"]*/\1'${err^}'/g' $file
注意:$ ./script.sh error
$ ./script.sh debug
,${1,,}
和${err^^}
将处理大写/小写,但可能不适用于4之前的bash版本。