0

私は好きなように出力を得ようと懸命に努力しています。

現在の出力:

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

必要な出力:

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

私が探しているのは、行の任意の場所に 0 (ゼロ) を含む行と前の行を grep して無視することだけです。私はbashシェルを使用しています。

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して逆数を見つけるのではなく、 ではない 1 桁の値を持つ行を探す方が簡単だと思います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 に答える