[英]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.