Чтобы отфильтровать все строки, вплоть до первой строки, начинающейся с цифры, используйте GNU sed
следующим образом:
sed '1,/^[0-9]/{/^[0-9]/!d}' logfile
This sed
скрипт редактирования применит / ^ [0-9] /! D
, т.е. «удалить все строки, не начинающиеся с цифры», ко всем строкам в диапазоне от 1 до первой строки, начинающейся с цифры ( 1, / ^ [0-9] /
) включительно.
Чтобы дополнительно отфильтровать любую строку INFO:
sed -e '1,/^[0-9]/{/^[0-9]/!d}' -e '/INFO/d' logfile
Итак, ваш сценарий становится
#!/bin/bash
function filter {
sed -e '1,/^[0-9]/{/^[0-9]/!d}' -e '/INFO/d'
}
filter <"/app/me/logs/$1" >"/app/me/logs/$1.filtered"
Обратите внимание, что я сделал функцию filter
независимой от имен файлов или путей. Его единственная цель - принимать входной поток и выводить фильтрованный поток.
Мне удалось найти причину проблемы. Я использовал постоянный / домашний раздел, поэтому настройки сохранялись в разных дистрибутивах Linux, которые я установил. В какой-то момент я сломал конфигурацию.
Я удалил ошибочные файлы конфигурации из своего домашнего каталога, и все начало работать правильно.