结合grep和&或逻辑

时间:2016-04-25 10:06:31

标签: python bash grep

我正在尝试转换以下用python编写的代码来使用cat | grep而不是打开文件。

原始代码:

LOG_NAME="/raft/log/{}{}{}_{}_Rx_flow.log".format(NTIME.tm_year,str(NTIME.tm_mon).zfill(2),str(NTIME.tm_mday).zfill(2),str(NTIME.tm_hour).zfill(2))
print time.strftime("%Y/%m/%d %H:%M:%S") + " Log file name, RX restart, is: " + LOG_NAME
print time.strftime("%Y/%m/%d %H:%M:%S") + " ERRTIMEMIN value: " + ERRTIMEMIN + " RXRESTART message value: " + RXRESTART

LINK_LOG_FILE = open(LOG_NAME, "r")
ISRXRESTART=0
for REPline in LINK_LOG_FILE:
  ***if RXRESTART in REPline and (ERRTIMEMIN in REPline or ERRTIMEMIN1 in REPline) and ISRXRESTART==0:***
     #Link restarted - correct behaviour.
     print time.strftime("%Y/%m/%d %H:%M:%S") + " RX restarted - This is correct behaviour"
     ISRXRESTART=1

我必须删除打开文件的行,并将*** ***的以下行更改为cat和grep的内容 例如:

os.popen("sshpass -p  ssh root@"+self.ipaddr+" cat "+LOG_NAME+"  | egrep `"+device_start+" "+ERRTIMEMIN+`").read().strip()

但我不知道如何结合或者&并在同一个grep

1 个答案:

答案 0 :(得分:0)

" OR"可以通过简单地一次点击多个模式来模拟:

egrep -E 'thing1|thing2' <file.txt

-E告诉egrep使用扩展正则表达式。

据我所知,没有&#34; AND&#34; grep中的operator,但是可以通过向前和向后顺序的grepping模式来模拟。

egrep -E 'thing1.*thing2|thing2.*thing1' <file.txt

使用-v代替&#34; NOT&#34;。

egrep -E 'thing1' <file.txt | egrep -v 'thing2'

这将找到&#34; thing1&#34;然后只抓住没有&#34; thing2&#34;。

的东西

希望这会有所帮助。