2011-04-08 134 views
2

我正在处理大量日志文件,而且大多数日志文件都有大量重复记录多次的字符串。 为了让其他与这些东西没有多大关系的人也可以轻松查看日志(对于我自己),我想制作一个脚本来删除可能导致其他“虚惊”的文本行人。 (“嘿,管理员,我有这些错误在这里多次”;>“叹息,这些错误并不意味着什么”种方式)bash - 从文本文件中删除多行不同的文本

是否有一些bash代码与grep,猫或awk,可以摆脱很多不同的文本行,而不必一遍又一遍地重复每行要删除的文件? (基本上去除所有无用线一举)

例子,我将标志着我在大胆要删除的行:

有一两件事我不知道为什么

它甚至不不管你怎么努力

记住这一点,我设计了这个 韵

在适当的时间解释

我所知道的

时间是有价值的东西

看着它飞过的钟摆

看着它倒计时的结束 天

时钟剔除生命

它是如此的不真实

没看出来下面

观看时向右走窗外

努力地想坚持,但即使不知道

浪费一切,只是为了

看着你去

很抱歉的林肯公园歌词,听着收音机,一边试图解决一个问题给出了一些不好的例子有时:P

是否所有这些线路可移动的一个命令?非常感谢如果有人知道如何。

回答

2
grep -v "<string1>\|<string2>\|<stringN>" /path/to/file 
+0

感谢。将对制作该日志的新副本而不会产生垃圾很有用。 羞耻rep不编辑文件。那么,总是有临时变量。 对同一文件中删除字符串: 的grep -v “ \ | \ | ” LOGFILE.LOG> $$ && MV $$ LOGFILE.LOG – devilhunter 2011-04-08 20:43:02

1

它删除not_wanted数组中提供的行。

#!/bin/bash 
    exec < example.txt 
    not_wanted[0]="It doesn’t even matter how hard you try" 
    not_wanted[1]="time is a valuable thing" 
    not_wanted[2]="The clock ticks life away" 
    not_wanted[3]="It’s so unreal" 
    not_wanted[4]="Trying to hold on but didn’t even know" 

    while read line; do 
     for i in "${not_wanted[@]}"; do 
      if [ "$line" == "$i" ]; then unset line; break; fi 
     done 
     if [ "$line" ]; then echo "$line"; fi 
    done 
+0

也感谢,这是不是一个巨大的字符串更overseeable一点用grep -v \ | – devilhunter 2011-04-08 20:58:57

1

把你不想要的行一个文件,然后

grep -v -f not.wanted filename > smaller.file