簡體   English   中英

bash grep表示字符串,忽略上一行

[英]bash grep for string and ignore above one line

我的腳本之一將返回以下輸出,

NameComponent=Apache
Fixed=False
NameComponent=MySQL
Fixed=True

因此,在上述輸出中,我試圖使用grep grep -vB1 'False'忽略以下輸出,這似乎不起作用,

NameComponent=Apache
Fixed=False

是否可以使用grep執行此操作,或者使用awk進行任何更好的操作。

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

對於與"False"匹配的每一行,將執行{}中的代碼。 N也將下一行帶入模式空間,然后d刪除整個內容,然后繼續進行下一行。 注意:使用多個pipes不視為一種好習慣。

@ Karthi1234:如果您的Input_file與提供的示例相同,請嘗試:

awk -F' |=' '($2 != "Apache" && $2 != "False")'   Input_file

首先將字段分隔符設置為空格或=,然后在此處檢查字段2nd的值是否不等於刺痛Apache和False,並提及沒有要執行的操作,因此默認打印操作將由awk完成。

編輯:根據OP的要求,以下是代碼更改后的一種,請嘗試:

awk '!/Apache/ && !/False/'   Input_file

您也可以更改字符串,以防萬一這些不是您想要的字符串,邏輯應該相同。

編輯2:例如->您可以根據需要更改字符串1和字符串2的值並增加條件。

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”作為第一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM