bash grep表示字符串并忽略一行以上的内容

bash grep表示字符串并忽略一行以上的内容,bash,grep,Bash,Grep,我的一个脚本将返回如下输出 NameComponent=Apache Fixed=False NameComponent=MySQL Fixed=True 因此,在上面的输出中,我尝试使用grep grep-vB1'False'忽略下面的输出,它似乎不起作用 NameComponent=Apache Fixed=False 是否可以使用grep执行此操作,或者使用awk执行其他更好的方法。@Karthi1234:如果您的输入文件与提供的示例相同,请尝试: awk -F' |=' '($2 !

我的一个脚本将返回如下输出

NameComponent=Apache
Fixed=False
NameComponent=MySQL
Fixed=True
因此,在上面的输出中,我尝试使用grep grep-vB1'False'忽略下面的输出,它似乎不起作用

NameComponent=Apache
Fixed=False

是否可以使用grep执行此操作,或者使用awk执行其他更好的方法。

@Karthi1234:如果您的输入文件与提供的示例相同,请尝试:

awk -F' |=' '($2 != "Apache" && $2 != "False")'   Input_file
首先将字段分隔符设为空格或=然后在此处检查字段2nd的值是否不等于和False,并且没有提到要执行的操作,因此默认打印操作将由awk执行

编辑:根据OP的请求,以下是更改的代码,请尝试:

awk '!/Apache/ && !/False/'   Input_file
您也可以更改字符串,以防它们不是您想要的,逻辑应该是相同的

EDIT2:eg->您可以根据需要更改string1和string2的值并增加条件

awk '!/string1/ && !/string2/'   Input_file

如果我理解正确,在Fixed=。。。当且仅当Fixed=True时,您希望打印这两行

以下awk应该可以做到这一点:

< command > | awk 'BEGIN {prev='NA'} {if ($0=="Fixed=True") {print prev; print $0;} prev=$0;}'
注意,如果第一行是Fixed=True,它将打印字符串NA作为第一行

<some-command> |tac |sed -e '/False/ { N; d}' |tac
NameComponent=MySQL
Fixed=True

对于与False匹配的每一行,{}中的代码都会被执行。N将下一行也带入模式空间,然后d在继续下一行之前删除整个内容。注:使用多个管道不被视为良好做法

但问题是2美元将保持不变。我只是用关键字False来寻找一些通用的方法。@Karthi1234:现在编辑了我的答案,请您在问题中更清楚一点,如果您对同一问题有任何疑问,请告诉我。