【发布时间】:2019-06-14 06:14:50
【问题描述】:
由于缺少其他选项,我正在尝试从配置文件中删除部分 elasticsearch { * }。
output {
if [env] {
if [containerimage] and [containerimage] != "apache" {
file {
path => "/var/log/logstash/logs/%{[env]}/%{file}-%{+YYYY-MM-dd}"
}
elasticsearch {
hosts => ["{{elasticsearch/host}}:{{elasticsearch/port}}"]
template_overwrite => true
}
}
}
}
我试图反转在 stackoverflow 上找到的 sed 命令,但它也会从配置文件中删除结尾 }。
[root@indexer conf.d]# sed '/{/{:1; /}/!{N; b1}; /elasticsearch/!p}; d' example
output {
if [env] {
if [containerimage] and [containerimage] != "apache" {
file {
path => "/var/log/logstash/logs/%{[env]}/%{file}-%{+YYYY-MM-dd}"
这可能是由于 }} 必须存在于 cfg 中。有什么想法可以克服这个问题吗?提前致谢
编辑:
其他一些实验:
sed '/elasticsearch {/{:1; /}/!{N; b1} }; /elasticsearch/!p; d' example
output {
if [env] {
if [containerimage] and [containerimage] != "apache" {
file {
path => "/var/log/logstash/logs/%{[env]}/%{file}-%{+YYYY-MM-dd}"
}
template_overwrite => true
}
}
}
}
但留下 template_overwrite 和一些右大括号。
【问题讨论】:
-
您在哪里找到了您使用的
sed命令?只有当收集的片段不包含elasticsearch时,它才会简单地吞噬卷曲中的内容并打印。没有尝试保留结束卷曲;实际上,您可以争辩说它努力消除结束卷曲。它可能是为了回答有关从结构中最里面的一组花括号中提取信息的问题而发布的......? -
在这里:stackoverflow.com/questions/32588469/…。我尝试了一下,可惜我不是 sed wizz,只能写一些简单的命令...
标签: sed