bash - удалить несколько разных строк текста из текстового файла
Я работаю с большим количеством файлов журнала, и большинство файлов журнала имеют много повторяющихся строк, которые регистрируются несколько раз. Чтобы сделать журналы легко видимыми для других, которые не имеют ничего общего с такими вещами (и для меня самого), я хотел создать сценарий, который удаляет некоторые текстовые строки, которые могут вызвать "ложную тревогу" для других людей., ("Эй, админ, у меня есть эти ошибки здесь несколько раз"; > "Вздох, эти ошибки ничего не значат")
Есть ли какой-нибудь bash-код с grep, cat или awk, который может избавиться от множества различных текстовых строк, не просматривая документ снова и снова для каждой удаляемой строки? (в основном удалите все мусорные строки одним махом)
Например, я выделю строки, которые я хочу удалить жирным шрифтом:
Одна вещь, я не знаю, почему
Даже неважно, как сильно ты стараешься
Имейте это в виду, я разработал эту рифму
Объяснить в свое время
Все я знаю
время ценно
Смотреть, как он летит, как маятник качается
Смотреть обратный отсчет до конца дня
Часы отсчитывают жизнь
Это так нереально
Не смотрел ниже
Смотрите, как время идет прямо в окно
Пытался удержаться, но даже не знал
Впустую все это просто
Смотреть как ты
Извините за тексты песен Linkin Park, слушая радио, пытаясь решить проблему, иногда приводим несколько плохих примеров:P
Все эти строки можно удалить в одной команде? Большое спасибо, если кто-нибудь знает как.
3 ответа
Удаляет строки, представленные в массиве 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
Поместите строки, которые вы не хотите, в файл, затем
grep -v -f not.wanted filename > smaller.file