2016-11-18 144 views
1

我試圖使用Python多一點,我知道這不是最好的用例,但它困擾着我爲什麼我不能得到它的工作。Python搜索字符串一個線程

我目前正在使用Python 2.7.6,我想捕捉一個文件,然後根據正則表達式從中抽出特定的字符串。下面的代碼適用於我想要的,但僅查看第一行。

cat /tmp/blah.txt | python -c "import re,sys; m = re.search('Host: (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*OS:(.*) Seq:', sys.stdin.read()); print m.group(1), m.group(2)" 

所以,我認爲我可以只使用一個for循環或到的FileInput讀取整個文件,然後把我的代碼的其餘部分在那裏,但我不斷收到錯誤在for循環。

cat /tmp/blah.txt | python -c "import sys; for line in sys.stdin: print line"                          File "<string>", line 1 
    import sys; for line in sys.stdin: print line 
       ^
SyntaxError: invalid syntax 

我已經嘗試了一些這種變化,但不能得到它的工作。它總是說for部分的語法無效。我知道它必須是非常愚蠢/顯而易見的事情,但任何幫助將不勝感激。

如果我創建了一個名爲arg.py的程序,並將它放在下面的代碼中並通過cat調用Python,它可以正常工作。這只是一個不符合要求的部分。

import sys 
for line in sys.stdin: 
    print line 
+0

你爲什麼混合Python和命令行這樣呢?只需使用'grep',或從Python打開文件。 – jonrsharpe

+0

正如我在第一句話中所說的,我知道這不是最好的用例,我只是想看看我能否實現它。我通過命令行搜索日誌來做很多事情,並且想知道我是否也可以使它適用於Python。 – Eric

回答

2

不幸的是,不允許在像等等if, for蟒蛇介紹壓痕結構,以被其他語句之前。

即使在您的arg.py文件請嘗試以下操作:

import sys; for line in sys.stdin: print line 

你會發現,語法也無效,其結果同樣的錯誤。

所以,要回答你的問題,你的問題不是你在終端運行程序的事實,但問題是在Python語法本身。它不支持這樣的語法 查看相關question

+0

感謝您的信息肯。我看到其他一個用於陳述的襯裏,因此只是假定它是全面工作的。我並沒有想到會有其他發言。 – Eric

+0

@Eric我很高興我的幫助。如果您滿意,請不要忘記對答案進行投票並標記爲解決方案 – Ken4scholars