将文本分成几个部分 (Unix)
Split a text in several parts (Unix)
我有下一个代码:
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的部分。也就是说,在这种情况下我只想获得两个部分:
变异{
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}" ] }
不是这部分:
- 变异{
add_field => ["idx", "sipp"]
}
我尝试过使用 grep、awk 和 cut。问题是这些命令(grep、awk 和 cut)也得到 "mutate",它也在 "if [type]" 中。
示例:
- 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 => [ "idx", "sipp"]
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
提前致谢,
此致。
对于您的实际示例:
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/
您可以使用 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}" ] }
我有下一个代码:
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的部分。也就是说,在这种情况下我只想获得两个部分:
变异{ 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}" ] }
不是这部分:
- 变异{ add_field => ["idx", "sipp"] }
我尝试过使用 grep、awk 和 cut。问题是这些命令(grep、awk 和 cut)也得到 "mutate",它也在 "if [type]" 中。
示例:
- 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 => [ "idx", "sipp"]
}
mutate {
add_field => [ "NB_timestamp", "%{SYS_YEAR}/%{SYS_MONTH}/%{SYS_DAY} %{SYS_HOUR}:%{SYS_MIN}:%{SYS_SEC}" ]
提前致谢,
此致。
对于您的实际示例:
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/
您可以使用 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}" ] }