vim - 在vim中缩进logstash文件的技巧
问题描述
你能帮我一个技巧在vim中使用两个splace缩进logstash文件吗?
例如这个
input {
stdin {
codec => "json"
}
}
filter {
json {
source => "Filebeat"
target => "Filebeat"
}
}
output{
elasticsearch {
hosts => ["localhost"]
index => "dhcp-%{+YYYY.MM}-11"
}
}
将会
input {
stdin {
codec => "json"
}
}
filter {
json {
source => "Filebeat"
target => "Filebeat"
}
}
output{
elasticsearch {
hosts => ["localhost"]
index => "dhcp-%{+YYYY.MM}-11"
}
}
这是另一个 logstash 配置文件的例子
input {
file {
path => "/usr/share/logstash/hola/*.xml"
type => "hola"
start_position => "beginning"
sincedb_path => "/usr/share/logstash/sincedb/hola"
codec => multiline {
pattern => "</HOLA>"
negate => true
what => "next"
}
codec => plain {
charset => "UTF-8"
}
max_open_files => "30000"
}
}
filter {
if [type] == "hola" {
mutate {
add_field => { "[rrrrrrr][name]" => "hola" }
}
mutate {
gsub => [
"message", "&", "E",
"message", "<\?xml .*\?>", "",
"message", "<BLOCO>", "",
"message", "<\/BLOCO>", "",
"message", "<br>", "",
"message", " ", ""
]
strip => ["message"]
}
xml {
source => message
target => hola
}
if ![hola] {
drop {
}
}
fingerprint {
method => "SHA256"
key => "433247"
source => [ "message" ]
}
mutate {
convert => {
"[hola][CrD_rILrAr]" => "string"
}
remove_field => [ "message" ]
}
date {
match => [ "[hola][DT_ffffff][0]", "dd/MM/yyyy HH:mm:ss" ]
timezone => 'America/LIMA'
}
}
}
output {
if [type] == "hola" {
elasticsearch {
hosts => [
"xxxtal.com",
"xxxtal.com",
"xxxtal.com",
"xxxtal.com"
]
user => logstash
password => xxxx
document_id => "%{fingerprint}"
index => "hola-%{+YYYY.MM}"
}
}
}
解决方案
我制作了一个键映射,它基本上为您的用例实现了自定义缩进。它适用于您提供的更大示例。可能不是最好的解决方案,当然也不是最干净的解决方案,但你去吧:
nmap <F2> :%s/^\s*<CR>:g/{/+ normal >G<CR>:g/}/normal <G<CR>:g/{.*}/:><CR>:g/\[/+ normal >G<CR>:g/\]/normal <G<CR>:g/\[.*\]/:><CR>
它的作用是:
- 删除所有缩进。
- 对于每个文件
{
或[
将文件的其余部分向右缩进一个。 - 对于每个
}
或]
将文件的其余部分向左缩进一个,包括找到括号的行。 - 具有
{.*}
和/或[.*]
的每一行也向左缩进一个。
就像我说的,不是最干净的方式,但它似乎有效。还寻找插件来做同样的事情,但这些似乎不存在于logstash文件中。
编辑:我试图稍微整理一下命令,但这会破坏一些边缘情况,这仍然是最好的结果命令。
推荐阅读
- vue.js - 无法在 Vue + 电子应用程序中编译 opencv4nodejs
- python - 当程序运行时,它会等待 5 秒钟来播放音乐,但之后它会每隔一秒播放一次音乐
- bash - 使用输入参数从 kubernetes 运行 python 脚本
- php - 基于付款方式的动态自定义订单号
- javascript - 用JSON字符串中的缩写替换js对象属性的名称?
- python - 从python中的点(。)分隔的键创建嵌套字典
- performance - Golang - 文字和常量之间的性能差异
- php - 未定义的索引:密码请帮助我在任何地方都看不到故障
- ansible - Ansible使用替换过滤器替换2个连续单词之间的任何字符
- angular - Ngrx 更改计数器状态不起作用我怎样才能使它起作用?