2013-08-19 4 views
-1

Попытка получить номер версии Debian в переменной, я столкнулся с проблемой, фильтрующей ее через grep.Удаление определенной строки из вывода оболочки

Если я lsb_release:

~# lsb_release -a 
No LSB modules are available. 
Distributor ID: Debian 
Description: Debian GNU/Linux 7.1 (wheezy) 
Release:  7.1 
Codename:  wheezy 

Чтобы получить только строку, содержащую описание, я попробовал:

# lsb_release -a | grep -i 'Description' 
No LSB modules are available. 
Description: Debian GNU/Linux 7.1 (wheezy) 

Однако, я все еще получаю строку "Нет LSB модули не доступны."

Я попытался исключить такие его:

# lsb_release -a | grep -v 'LSB' | grep -i 'Description' 
No LSB modules are available. 
Description: Debian GNU/Linux 7.1 (wheezy) 

Я все еще получаю строку, содержащую строку «LSB». Почему это происходит? Как я могу получить нужную линию в одиночку?

ответ

2

Представляется, что нежелательная линия выводится на STDERR, а не стандартный вывод . Если вы не хотите этого, перенаправите его на /dev/null. Попробуйте:

lsb_release -a 2>/dev/null | grep -i 'Description' 
1

трубы STDERR на стандартный вывод, а также использовать cut:

debian_version=$(lsb_release -a 2>&1 | grep 'Description' | cut -f2) 

Или выбросить сообщения об ошибках на всех:

debian_version=$(lsb_release -a 2>/dev/null | grep 'Description' | cut -f2)