【问题标题】:extract data from text file with linux使用linux从文本文件中提取数据
【发布时间】:2016-12-22 14:07:52
【问题描述】:

我有文件,我需要提取一些数据。我面临的问题是某些行与其他行几乎不一样。这是一个例子:

 action=accept trandisp=noop srcip=1.1.1.1 dstip=2.2.2.2 service=PING proto=1 duration=61 
 action=accept trandisp=noop srcip=1.1.1.1 dstip=3.3.3.3 dstport=80 service=http proto=1 duration=61

我想在第一行获取带有服务的目标 IP,并且 第二行带有 dstport 和服务的目标 IP。

我是 linux 新手,我用 grep 和 cut 进行了尝试,但它对我不起作用。 请帮我解释一下你的答案。

【问题讨论】:

  • 请问您尝试了什么? this 也可能会有所帮助
  • gawk(或者perl)或者sed的好案例

标签: linux


【解决方案1】:

这个呢?
grep -o -P "dstip=[0-9.]+ (dstport=[0-9]+)? service=\w+ (dstport=[0-9]+)?" your-file

解释:

-o, --only-matching       show only the part of a line matching PATTERN
-P, --perl-regexp         PATTERN is a Perl regular expression

当然,键值顺序很重要。

【讨论】:

  • 这是一个 perl 正则表达式。 + 表示一个或多个,应用于[0-9.]? 表示无或一并应用于(dstport=[0-9]+ service=\w+)
  • 哇,这很好用,但是 + 它是干什么用的,还有 (dstport=[0-9]+ service=\w+)?... ().. \w+...和问号......有时服务会出现在 dstport 之前。有什么解决办法吗...谢谢
  • 如果该行没有 [dstport=xx] 的 grep,如我发送的文件的第一行所示,它将仅打印 [dstip] 并忽略 [service=PING]。当我将输出发送到文件时,它也不会打印新行。
  • 已编辑。我没有尝试过,但这应该可以解决问题。我认为新行问题与原问题无关。
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2018-06-14
  • 2011-04-20
相关资源
最近更新 更多