Печать строки в зависимости от содержимого и подстановка параметров в алиас

Нашел команду которая печатает логи апача с поддержкой юникода:

tailf /var/log/apache2/error.log | while read -r line; do echo -e "$line"; done;

Хочу сделать алиас на нее, например utail, который будет принимать один обязательный параметр - файл и второй не обязательный - искомая строка. Пример вызова:

utail /var/log/apache2/error.log "/api/v0.1"

Найденная строка должна целиком или частично иметь желтый фон \033[43m "$line "\033[0m (Если такое возможно и будет работать)


Ответы (2 шт):

Автор решения: ipatev_nn

Создайте функцию:

utail() {
#Первый параметр обязательный
    file="${1:?Не передано имя файла}"
#Второй параметр строка поиска
    searchLine="${2}"
#Проверка существует ли файл, если нет, возникнет ошибка
    [[ -f "${file}" ]] || { echo "файл ${file} не существует"; return 1; }
#Начало цикла
    while read -r line; do
#Проверка, если переменная строки поиска не пустая, 
#и строка содержит искомый текс =~, либо равна ==, нужное подставить
        if [[ -n "${searchLine:+123}" && "${line}" =~ "${searchLine}" ]]; then
#То печатаем с подсветкой
            echo -e "\033[43m${line}\033[0m"
        else
#Иначе без подсветки
            echo -e "${line}"
        fi
#Передача в цикл файла, отредактировал согласно комментария:
    done< <(tail -F "${file}")
}

И запускайте функцию так же:

utail "/file" "line"

Функцию так же можно добавить в bashrc как глобально для всех пользователей, так и одного пользователя

→ Ссылка
Автор решения: Zt.
utail(){awk -v l="$2" '$0~l{$0="\033[43m"$0"\033[0m"}{print}' "$1"}
→ Ссылка