0

我正在努力获得我喜欢的输出。

电流输出:

###Server1###
2
###Server2###
0
###Server3###
     5
###Server4###
     0

所需输出:

###Server1###
2
###Server3###
     5

我正在寻找的只是 grep 并忽略任何行以及在该行的任何位置包含 0(零)的前一行。我正在使用 bash shell。

4

2 回答 2

0

这是一种可能的方法:

$ grep -B 1 "^\s*[1-9]$" file
###Server1###
2
--
###Server3###
     5

摆脱group separator,我们还可以这样做:

$ grep --no-group-separator -B 1 "^\s*[1-9]$" file
###Server1###
2
###Server3###
     5

解释

我认为与其使用grep -v查找倒数,不如查找具有单个数字值的行不是0. 这是通过表达式完成的,该"^\s*[1-9]$"表达式允许数字前有空格。

-B 1我们让它打印匹配的行之前的行。

于 2013-07-24T11:19:27.687 回答
0

GNU 的代码:

sed '$!N;/\s*\b0\b\s*/d' file
$ sed '$!N;/\s*\b0\b\s*/d' 文件
###服务器1###
2
###服务器3###
     5
于 2013-07-24T20:57:21.827 回答