bash - 从文本文件中删除多个不同的文本行

时间:2011-04-08 19:46:40

标签: macos bash text lines

我正在使用大量日志文件,并且大多数日志文件都有许多重复的字符串,这些字符串被多次记录。 为了让那些与这些事情没有多大关系的人(对我自己也很容易)可以轻松查看日志,我想制作一个脚本,可以删除一些可能导致其他人“误报”的文本行。 (“嘿管理员,我这里有多次这些错误”;>“叹气,这些错误并不意味着什么”的方式)

是否有一些使用grep,cat或awk的bash代码可以摆脱许多不同的文本行,而不必为要删除的每一行反复浏览文档? (基本上一举删除所有垃圾线)

例如,我将在粗体

中标记要删除的行
  

有一件事我不知道为什么

     

您尝试的努力程度并不重要

     

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

     

及时解释

     

我所知道的全部

     

时间是有价值的事情

     

当钟摆摆动时,看着它飞过

     

注意它倒数到最后   天

     

时钟会延长生命

     

这太不真实了

     

没看下面

     

留意窗外的时间

     

试图坚持,但甚至不知道

     

浪费一切只是为了

     

注意你去

对于林肯公园歌词感到抱歉,在试图解决问题的过程中收听广播有时会给出一些不好的例子:P

所有这些线都可以在一个命令中移除吗? 非常感谢,如果有人知道如何。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:1)

将您不想要的行放在文件中,然后

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