2017-12-21 26 views
-1

stdoutからファイルにリダイレクトする必要がありますが、特定のstring1を含むか、または特定のstring2を含んでいない行だけをリダイレクトする必要があります。どうやってやるの?私はちょうど分離して行う方法を知っています(string1を含む行またはstring2を含まない行)。それはgrepである必要はなく、端末のパイプで使用できるだけのものです。文字列1を含むgrep行または文字列2を含むOR NOT

答えて

0

レスキューへのPerl!

perl -ne 'print if /string1/ || ! /string2/' < file 
  • -nライン
  • /string1/による入力ラインが!あなたはawkへのパイプを
0

をすることができ、 "ない" を意味し、

  • ||手段 "または" 正規表現マッチで読み取ります。

    your_process | awk '$0!~/string2/ || $0~/string1/{print $0}' 
    

    処理されている行は、「文字列2」が含まれていない場合:$0!~/string2/
    をORラインというプロセスは、「文字列1」が含まれない場合:@Mischaはコメントで共有したよう{print $0}

    $0~/string1/
    を次にラインを印刷あなたはawkで非常に簡潔になることができます。あなたはこのような何か試すことができます

    your_process | awk '/string1/ || !/string2/' 
    
  • +0

    ありますが、私はちょうど私が推測 '&&'変更します。 –

    +0

    {print $ 0}がデフォルトです。 tersaholicsの場合: ... | awk '/ string1/|| !/ string2/' – Mischa

    +0

    @ T.Poeこれは申し訳ありません。 「OR NOT」は奇妙に聞こえて、私の脳はそれを処理できないと決めました。 '&&'を '||'に変更するだけで、うまくいくはずです。 – JNevill

    0

    :これは書くことができる問題ではない `and`で` or`が

    tail -f {SOMETHING} | grep string1 | grep -v string2 >> /tmp/out.log 
    
    +0

    'tail 'からの入力を取得して2つの' grep'プロセスに渡すので、 "ラインバッファ"出力を考慮する価値があります。 (こんにちはキエフから) – RomanPerekhrest

    +0

    @RomanPerekhrestТашотамКиїв...привітзЧеркаськоїобласті!!! –

    +0

    @RomanPerekhrest主なアイデア - 目的の文字列に一致させるために 'grep string1'を使い、興味のない文字列を除外するために' grep -v string2'を使います。 –

    関連する問題