我有下一个代码:
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}
if [type] == "batch" {
if [idx] != "sipp" {
mutate {
add_field => [ "idx", "sipp"]
}
}
if [message] == "" {
drop { }
}
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}
我想获得 mutate的部分。也就是说,在这种情况下,我只想获得两个部分:
mutate { add_field => [" NB_timestamp","%{SYS_YEAR} /%{SYS_MONTH} /%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]}
mutate { add_field => [" NB_timestamp","%{SYS_YEAR} /%{SYS_MONTH} /%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]}
不是这一部分:
我尝试过使用grep,awk和cut。问题是这些命令(grep,awk和cut)得到" mutate" ,它位于"如果[type]" 他们也是。
示例:
输出:
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
mutate {
add_field => [ "idx", "sipp"]
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
提前致谢,
问候。
答案 0 :(得分:0)
对于您的实际示例:
awk '/}$/{f=0}f;/^mutate/{f=1}' file
结果:
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
要让所有实体更改标记顺序:
awk '/^mutate/{f=1}f;/}$/{f=0}' file
结果:
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}
说明:https://nixtip.wordpress.com/2010/10/12/print-lines-between-two-patterns-the-awk-way/
答案 1 :(得分:0)
你可以使用sed来提取想要的mutate的部分:
sed -n '/^mutate {/,/ }/p' file.txt
结果应为:
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
}