.bashrc
выполняется только для интерактивных оболочек.
Это то, что я сделал. Создайте новый файл .bash_env
в домашнем каталоге. Поместите туда все свои псевдонимы, например:
shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
Затем ссылайтесь на него в своем .bash_profile
(поместите туда реальное имя пути, конечно):
export BASH_ENV='/home/username/.bash_env'
(Выйдите и войдите в систему, чтобы активировать)
BASH_ENV
на странице manpage:
Если этот параметр задается, когда bash выполняет скрипт оболочки, его value интерпретируется как имя файла, содержащее команды для инициализации оболочка, как в ~/.bashrc.
и:
Когда bash запускается неинтерактивно, чтобы запустить сценарий оболочки, например, он ищет переменную BASH_ENV в среде, увеличивает свое значение, если оно отображается там и использует развернутое значение в качестве имени файла для чтения и выполнения.
Чтобы отфильтровать все строки, вплоть до первой строки, начинающейся с цифры, используйте 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
независимой от имен файлов или путей. Его единственная цель - принимать входной поток и выводить фильтрованный поток.