2013-08-19 48 views
-1

試圖將Debian版本號變爲變量,我遇到了通過grep進行過濾的問題。從shell輸出中刪除特定行

如果我做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) 

不過,我還是得有 「No 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而不是stdout。如果你不想要它,重定向到/dev/null。嘗試:

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

管道錯誤輸出到標準輸出,並使用cut

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

或根本扔掉的錯誤信息:

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