как избавиться от ненужных строк? while loop?

.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 в среде, увеличивает свое значение, если оно отображается там и использует развернутое значение в качестве имени файла для чтения и выполнения.

1
02.11.2016, 21:33
2 ответа

Почему бы и нет следующие:

grep -Ev "INFO|SLF4J|201[0-9]
-1
28.01.2020, 02:12

Чтобы отфильтровать все строки, вплоть до первой строки, начинающейся с цифры, используйте 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 независимой от имен файлов или путей. Его единственная цель - принимать входной поток и выводить фильтрованный поток.

0
28.01.2020, 02:12

Теги

Похожие вопросы