所以我现在已经使用Willie大约8个月了,它记录了它运行的IRC频道中发生的所有内容的raw.log。现在,问题在于它记录了很多不必要的,好的,臃肿的。
以下是一个例子:
<<1419986827.01 :BotSelig!willie@Snoonet-bhs.ien.kdgglt.IP NICK Snoo62763
>>1419986827.04 PRIVMSG Snoo62763 :TypeError: not all arguments converted during string formatting (file "C:\Python27\willie\willie\coretasks.py", line 254, in track_nicks)
<<1419986827.12 :Snoo62763!willie@Snoonet-bhs.ien.kdgglt.IP PRIVMSG Snoo62763 :TypeError: not all arguments converted during string formatting (file "C:\Python27\willie\willie\coretasks.py", line 254, in track_nicks)
<<1419986827.22 :NickServ!NickServ@services.snoonet.org NOTICE Snoo62763 :Welcome to Snoonet, Snoo62763! Here on Snoonet, we provide services to enable the registration of nicknames and channels! For details, type /msg NickServ help and /msg ChanServ help.
<<1419986832.84 :venn177!venn177@user/venn177 PRIVMSG #RLB :uh, well, this seems to work
<<1419986832.84 :venn177!venn177@user/venn177 PRIVMSG #RLB :in any case, let's try this
>>1419986852.92 QUIT :KeyboardInterrupt
>>1419986861.61 CAP LS
>>1419986861.61 NICK BotSelig
>>1419986861.62 USER willie +iw BotSelig :Willie Embosbot, http://willie.dftba.net
<<1419986861.67 :veronica.snoonet.org NOTICE Auth :*** Looking up your hostname...
所有这一切,我唯一想要保留的是在&#34; #RLB之后发生的文字:&#34;。我想保留每一行文字&#39;仍然在自己的线上,但削减所有不必要的绒毛。那么我怎样才能读取文本文件的每一行,检查它是否有&#34; #RLB:&#34;在其中,然后只保存之后发生的所有事情?
最终目标是拥有数据库来生成马尔可夫链,这显然不会影响那里的所有膨胀。 (我实际上并不知道是否有助于了解这一点)
我想另一种说明方式是,我想采取那里所说的内容,然后将其修改为:
uh, well, this seems to work
in any case, let's try this
答案 0 :(得分:2)
这是一个Perl解决方案:
perl -i -ne 'print if s/^.*?#RLB ://' log.txt
(我假设是一个unixish shell。在Windows中单引号不起作用,你必须使用双引号:-ne "..."
)
-i
表示它会修改文件。
-n
为每一行运行提供的代码
-e ...
在命令行上指定代码。
代码本身使用基于正则表达式的搜索/替换指令。我们正在寻找
^ # beginning of line
.*? # anything (any character, 0 or more times, as few as possible)
#RLB : # the text "#RLB :"
并将其替换为空,从而将其删除。这样只留下文本。
我们只输出已成功修改的行。这有效地过滤掉所有其他行,留下消息。