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

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

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

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

idsfsvcvs sdf sdf e e  sd vs d s g sg  s vc  d

slkdfnls 1234 keep me text 9876 das a g w eg dsf sd fsdf
sdfs fs dfsdf
sdfsdf sdf
sdf s fs
dfsf ds

我想做这样的事

$ getinfo "1234" "9876" 日志

$ 猫日志

给我发短信

答案1

一行 sed 就可以帮你完成这个任务:

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

答案2

通常您可以使用 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% 确定,我没有测试过

答案3

这取决于你的文件内容。你可以从一些简单的内容开始,例如:

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

这适用于提供的示例。如果需要,您可以对其进行处理以涵盖其他数据格式。您还可以通过附加以下内容将输出重定向到文件> /path/to/output

答案4

无论如何,我会做以下事情:

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

虽然不是完美的,也不是最好的方法,但如果你经常使用 vim 的话就很容易记住。

相关内容