我正在尝试转换以下用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
答案 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;。
的东西希望这会有所帮助。