2016-11-18 113 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