2011-04-08 172 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