2016-11-18 38 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)" 

だから、私はちょうどファイル全体を読み込み、そこに私のコードの残りの部分を入れてループまたはFileInputクラスのために使用できると仮定が、私はのためのループでエラーが発生して続けます。

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と呼ばれるプログラムを作成し、その中に以下のコードを入れて、猫を経由してのPythonを呼び出すと、それが正常に動作します。これは、動作していない1つのライナー部分です。

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

を確認し、このような構文 をサポートしていませんか? 'grep'を使うか、Pythonからファイルを開くだけです。 – jonrsharpe

+0

私が最初の文章で述べたように、これはこれが最良の使用例ではないことを知っています。私はそれを動作させることができるかどうかを見たいと思っていました。ログを検索するためのコマンドラインからたくさんのことを行い、Pythonでもうまく動作するかどうかを見たいと思っていました。 – Eric

答えて

2

残念ながら、他の人の間でif, forのようなpythonでインデントを導入構築物は、他の文が先行することが許可されていません。

でもあなたのarg.pyファイルに次のようにしてみてください。

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

あなたは構文が同じエラーになりこれも無効であることを発見するでしょう。

だから、あなたの質問に答えるために、あなたの問題は、端末にプログラムを実行したという事実はありませんが、問題はPythonの構文そのものです。それはなぜあなたは、Pythonと、そのようなコマンドラインを混合している関連question

+0

Kenさんに感謝します。私は文のために使用された他のライナーを見ました。私は他の声明が先行しているとは思わなかった。 – Eric

+0

@エリック私は助けられてうれしいです。あなたがそれに満足していれば、答えをアップして解決策としてマークすることを忘れないでください – Ken4scholars