bash - удалить несколько разных строк текста из текстового файла - PullRequest
2 голосов
/ 08 апреля 2011

Я работаю с большим количеством файлов журналов, и большинство файлов журналов имеют много повторяющихся строк, которые регистрируются несколько раз.Чтобы сделать журналы легко видимыми для других, которые не имеют ничего общего с такими вещами (и для меня самого), я хотел создать сценарий, который удаляет некоторые текстовые строки, которые могут вызвать «ложную тревогу» для других людей.,(«Эй, админ, у меня есть эти ошибки здесь несколько раз»;> «Вздох, эти ошибки ничего не значат»)

Есть ли какой-нибудь bash-код с grep, cat или awk, который может получитьизбавиться от множества различных текстовых строк, без необходимости перебирать документ снова и снова для каждой удаляемой строки?(в основном удаляет все мусорные строки одним махом)

Например, я отмечу строки, которые я хочу удалить, в полужирный :

Одна вещь, которую я надеваюНе знаю, почему

Не имеет значения, как сильно вы пытаетесь

Имейте это в виду, я разработал эту рифму

Чтобы объяснить ввремя

Все, что я знаю

время - ценная вещь

Смотри, как оно летит, как маятник качается

Смотретьобратный отсчет до конца дня

Часы отсчитывают время жизни

Это так нереально

Не смотрелниже

Смотрите, как время идет прямо в окно

Пытался удержаться, но даже не знал

Потратил все это только на

Watch you go

Извините за тексты песен Linkin Park, слушая радио, пытаясь решить проблему, иногда приводите несколько плохих примеров: P

Все этоСъемные линии в одномкоманда?Большое спасибо, если кто-нибудь знает как.

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011
grep -v "<string1>\|<string2>\|<stringN>" /path/to/file
1 голос
/ 09 апреля 2011

Поместите ненужные строки в файл, затем

grep -v -f not.wanted filename > smaller.file
1 голос
/ 09 апреля 2011

Удаляет строки из массива 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
...