在日志文件的关键字之间获取文本

如果我有一个日志文件,只想将1234和9876之间的文本转储到另一个文件中,我怎么能轻松地做到这一点?

如果我有这样的文本文件:

idsfsvcvs sdf sdf ee sd vs dsg sg s vc d slkdfnls 1234 keep me text 9876 das agw eg dsf sd fsdf sdfs fs dfsdf sdfsdf sdf sdf s fs dfsf ds 

我想做这样的事情

$ getinfo“1234”“9876”日志

$猫日志

保持我的文字

一行sed可以为你做这个:

sed -n 's/.*1234 \(.*\)9876.*/\1/p' textfile.txt > log

通常你可以用grep和-o参数来做到这一点。

 -o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. 

所以它会是这样的:

  grep -Po '1234.*9876' >> log 

不是100%的正则expression式顺便说一句,我没有testing它

这取决于你的文件内容。 你可以从简单的事情开始:

 $ grep 1234 logfile | grep 9876 | cut -d ' ' -f 3,4,5 

这适用于提供的示例。 如果需要的话,您可以使用它来覆盖其他数据格式。 您还可以通过追加> /path/to/output将输出redirect到一个文件

对于它的价值,我会做以下几点:

  1. grep 1234.*9876 > myfile
  2. vim myfile
  3. :%s/^.*1234// (将所有内容删除至1234)
  4. :%s/9876.*$// (删除9876之后的所有内容)

不完美,或者最好的方法,但是如果你经常使用vim,就容易记住。