如果我有一个日志文件,只想将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到一个文件
对于它的价值,我会做以下几点:
grep 1234.*9876 > myfile vim myfile :%s/^.*1234// (将所有内容删除至1234) :%s/9876.*$// (删除9876之后的所有内容) 不完美,或者最好的方法,但是如果你经常使用vim,就容易记住。