如果我有一个日志文件并且只想将 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
无论如何,我会做以下事情:
grep 1234.*9876 > myfile
vim myfile
:%s/^.*1234//
(删除 1234 之前的所有内容):%s/9876.*$//
(删除 9876 之后的所有内容)
虽然不是完美的,也不是最好的方法,但如果你经常使用 vim 的话就很容易记住。