如何使用GREP过滤掉下面没有数据的行?

时间:2020-08-21 06:42:05

标签: grep

我的数据格式如下

-----------------data1-------------
that- 485
that- 234
that- 789
-----------------data2-------------
that- 343
-----------------data3-------------
this+ 123
this+ 509
this+ 837
-----------------data4-------------
that+159
-----------------data5-------------
this+151

我怎样才能只获得其中带有“ this”的行以及数据线?我的输出应该像:

-----------------data3-------------
this+ 123
this+ 509
this+ 837
-----------------data5-------------
this+151

我尝试过grep 'data\|this',但这也包括数据行,即使它下面没有'this'也是如此。使用此命令,输出如下所示:

-----------------data1-------------
-----------------data2-------------
-----------------data3-------------
this+ 123
this+ 509
this+ 837
-----------------data4-------------
-----------------data5-------------
this+151

1 个答案:

答案 0 :(得分:0)

(对于提供的示例输入)似乎为“ this”和前一行(选项-B1)进行了grepping:

grep -B1 this

按原样获取输出

-----------------data3-------------
this+ 123
this+ 509
this+ 837
--
-----------------data5-------------
this+151

如果您不喜欢分隔线--,则可以通过第二遍过滤。

grep -B1 this | grep -v "^--$"

即仅保留不匹配(选项-v pattern)的分隔符。
然后您将得到所需的内容:

-----------------data3-------------
this+ 123
this+ 509
this+ 837
-----------------data5-------------
this+151