Печать строки в зависимости от содержимого и подстановка параметров в алиас
Нашел команду которая печатает логи апача с поддержкой юникода:
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 как глобально для всех пользователей, так и одного пользователя