Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何筛选出不符合';你没有使用GREP的数据吗?_Grep - Fatal编程技术网

如何筛选出不符合';你没有使用GREP的数据吗?

如何筛选出不符合';你没有使用GREP的数据吗?,grep,Grep,我有以下格式的数据 -----------------data1------------- that- 485 that- 234 that- 789 -----------------data2------------- that- 343 -----------------data3------------- this+ 123 this+ 509 this+ 837 -----------------data4------------- that+159 -----------------

我有以下格式的数据

-----------------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
(对于提供的示例输入)似乎对“this”和前面的行(选项
-B1
)进行了grepping:

这样就得到了输出

-----------------data3-------------
this+ 123
this+ 509
this+ 837
--
-----------------data5-------------
this+151
如果您不喜欢分隔符行
--
,可以再次过滤它

grep -B1 this | grep -v "^--$"
i、 e.仅保留与分隔符不匹配的内容(选项
-v模式
)。
然后,您将获得所需的:

-----------------data3-------------
this+ 123
this+ 509
this+ 837
-----------------data5-------------
this+151
(对于提供的示例输入)似乎对“this”和前面的行(选项
-B1
)进行了grepping:

这样就得到了输出

-----------------data3-------------
this+ 123
this+ 509
this+ 837
--
-----------------data5-------------
this+151
如果您不喜欢分隔符行
--
,可以再次过滤它

grep -B1 this | grep -v "^--$"
i、 e.仅保留与分隔符不匹配的内容(选项
-v模式
)。
然后,您将获得所需的:

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

您能说出需要处理的最大连续
this
行数吗?不确定输入格式的边缘情况,但尝试简单地grep表示“this”和前面的行:
grep-B1 this
。它似乎对给定的示例输入有效。如果这不起作用,请提供失败的示例输入。您得到了两个答案,尽管未投票。请阅读它的建议,解释现有答案缺失的地方,以满足您的需求,或者在等待可能更好的答案后,接受一个。在这里,您可以在“现代”awk方法和通过标记的grep解决方案之间进行很好的选择。我今天创建了这个帐户。我无法对任何答案进行投票,因为我的帐户的信誉点数不足15。请阅读链接。接受你能做的其中一个答案。只需单击答案旁边的一个“勾号”。您能说出需要处理的最大连续
this
行数吗?不确定输入格式的边缘情况,但尝试简单地grep“this”和前一行:
grep-b1this
。它似乎对给定的示例输入有效。如果这不起作用,请提供失败的示例输入。您得到了两个答案,尽管未投票。请阅读它的建议,解释现有答案缺失的地方,以满足您的需求,或者在等待可能更好的答案后,接受一个。在这里,您可以在“现代”awk方法和通过标记的grep解决方案之间进行很好的选择。我今天创建了这个帐户。我无法对任何答案进行投票,因为我的帐户的信誉点数不足15。请阅读链接。接受你能做的其中一个答案。只需单击答案旁边的一个“勾号”。谢谢。你的解决方案有效。但是
-B1
选项不应该导致某些行重复吗?让我们以
data3
为例
此+123
匹配,前一行
数据3
也与
此+123
一起打印。当
这个+509
匹配时,它的前一行(
这个+123
)不也应该被打印,从而导致两个
这个+123
的实例。我不会说“应该”,也许“可以”。但我同意grep实现者的观点,即它永远不会带来好处,也就是说,它不会匹配我能想到的任何用例。所以-它不是。我在第二个版本中故意删除的“-”,表示行“凝结”的位置,即跳过其他“-B1”行的位置。谢谢。你的解决方案有效。但是
-B1
选项不应该导致某些行重复吗?让我们以
data3
为例
此+123
匹配,前一行
数据3
也与
此+123
一起打印。当
这个+509
匹配时,它的前一行(
这个+123
)不也应该被打印,从而导致两个
这个+123
的实例。我不会说“应该”,也许“可以”。但我同意grep实现者的观点,即它永远不会带来好处,也就是说,它不会匹配我能想到的任何用例。所以-它不是。我在第二个版本中故意删除的“-”,表示行“凝结”的位置,即跳过额外的“-B1”行的位置。