Linux 无法从日志文件中提取精确的键值对

Linux 无法从日志文件中提取精确的键值对,linux,awk,sed,grep,Linux,Awk,Sed,Grep,我有多个gzip日志文件,其中的文本位于以下格式的行之间: someRandomText... ,"interestingKey":"interestingValue",moreRandomText 为此,我尝试了zgrep-o-I''interestingKey:[^]*'日志* 即使它找到了相关的行,它也会在行上的灰色模式前后输出文本 是否有一种方法可以将结果仅限于键值对。有没有一种方法可以将感兴趣的值过滤到那些只有数字而没有字母的值 注意:密钥必须不区分大小写。钥匙总是一样的。值总是不同

我有多个gzip日志文件,其中的文本位于以下格式的行之间:

someRandomText... ,"interestingKey":"interestingValue",moreRandomText
为此,我尝试了
zgrep-o-I''interestingKey:[^]*'日志*
即使它找到了相关的行,它也会在行上的灰色模式前后输出文本

是否有一种方法可以将结果仅限于键值对。有没有一种方法可以将感兴趣的值过滤到那些只有数字而没有字母的值


注意:密钥必须不区分大小写。钥匙总是一样的。值总是不同的。

使用
grep
lookahead


$echo'someRandomText,“兴趣键”:“兴趣值”,更多随机文本“|grep-oP”(?使用
grep
lookahead

$echo'someRandomText…,“interestingKey”:“interestingValue”,moreRandomText'| grep-oP'(?您想要:

zgrep -oiP '"interestingKey":"\K[^"]*' 
那将 在引号中查找键名,后跟冒号和值的开头引号。
然后
\K
指令“忘记”到目前为止匹配的文本。
然后我们匹配一些非引号字符,它们将发出
-o

您想要:

zgrep -oiP '"interestingKey":"\K[^"]*' 
那将 在引号中查找键名,后跟冒号和值的开头引号。
然后
\K
指令“忘记”到目前为止匹配的文本。
然后我们匹配一些非引号字符,它们将发出
-o

另一个

$ ... | grep -oP '(?<=interestingKey":)[^,]+'
$…|grep-oP'(?另一个

$ ... | grep -oP '(?<=interestingKey":)[^,]+'

$…|grep-oP'(?可以使用
awk
完成,但这不是最好的解决方案

awk -F, '{for(i=1;i<=NF;i++)if($i~/interestingKey/)print $(i+1)}' file
moreRandomText

awk-F'{for(i=1;i可以使用
awk
完成,但这不是最好的解决方案

awk -F, '{for(i=1;i<=NF;i++)if($i~/interestingKey/)print $(i+1)}' file
moreRandomText

awk-F'{for(i=1;iThat“random text”具有JSON的外观。是吗?日志中也包含大量文本和JSON。“random text”具有JSON的外观。是吗?日志中包含大量文本和JSON。这几乎是我感兴趣的内容。但它也会在值之后给出内容。您可以假设值总是以引号结尾。现在它打印到行尾它打印
interestingKey:
和下一个逗号(
)之间的所有内容。它不应该打印到行尾。注意,
lookahead
输入模式必须是固定的。这几乎是我感兴趣的。但它也会在值之后显示内容。您可以假设值总是以引号结尾。现在它打印到行尾,它打印
interestingKey之间的所有内容”:
和下一个逗号(
)。它不应打印到行尾。注意,
先行
输入模式必须固定。