繁体   English   中英

SED AWK从日志文件中剥离数据

[英]SED AWK to strip data from log file

嗨,我在日志文件中包含以下条目。 如果我在上面的行中看到“拒绝”,则需要在名称字段中生成名称列表。 所以我需要得到类似的东西:

莎莉
马特

琳达

您能帮我这个忙吗,如果您能解释该命令,我将不胜感激,以便以后将其用于其他日志。

<!-- user 1 -- >
<ABC  12345 "123" text="*Denied: ths is aa test status="0" > 
   <key flags="tdst"  name="sally"  />
<userbody>
</Status>

<!-- user 2 -- >
<ABD  12345 "123" text="*Denied: ths is aa test status="0" > 
  <key flags="tdst"  name="Matt"  />
<userbody>
</Status>

<!-- user 3 -- >
<ABD  12345 "123" text="*Denied: ths is aa test status="0" > 
   <key flags="tdst"  name="Linda"  />
<userbody>
</Status>

问候

这个GNU sed可以工作

sed -n -r '/Denied:/{N; s/^.*name="([^"]*)".*$/\1/; p}' file  

n是跳过打印行
r使用扩展的正则表达式(用于此处分组)不转义()个字符
N正在读取下一行并将其添加到模式空间
s / input / output /是替代
^是行的开始,因此^。* name =“将查找所有内容,直到[^”]第一个下一个引号为止。
$是行尾
[^“]是非”(设置否定)的任何字符
\\ 1仅采用匹配组,即([^“] *)
p是打印行(当在已处理的2行上完全满足“拒绝”条件时)

输出

sally
Matt
Linda

尝试这个:

sed -rn '/Denied/{n;s#(.+)(name="(\w+))"(.+)#\3#p}' < sample.txt

/Denied/ -搜索关键字
{n; -如果找到,请阅读下一行
s#(.+)(name="(\\w+))"(.+)#\\3#p查找正则表达式组并仅打印出第三个,它等于数据样本中引号内的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM