从shell输出中删除特定行

时间:2013-08-19 11:12:55

标签: bash grep

尝试将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 个答案:

答案 0 :(得分:2)

似乎不需要的行输出到 stderr ,而不是 stdout 。如果您不想要它,请将其重定向到/dev/null。尝试:

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

答案 1 :(得分:1)

将stderr传递给stdout,然后使用cut

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

或者完全抛弃错误信息:

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