2017-05-01 6 views
0

私は多くのテストの結果であるテキストの行数百人を出力.txtファイルを持っています。 {} nameOfTest:テストの開始時に、それはbashシェルスクリプトで見つかった行の後に行が見つかった行と行が表示されます。

LAUNCHのTESTは述べています。

は、次に失敗したテストに合格しているプリントアウトへ進みます。テストの終わりに、それは======================================

出力します====== ラン3は0.000秒、3回の成功、失敗0でテストします

これらは.txtファイルの2行です。私がしたいことは、LAUNCH TESTとテストの結果を印刷します。

私はそうのようなtxtファイルのすべての行を反復処理することができます知っている:

cat ~/sample.txt | while read line; do 
    #Then compare "$line" with what I am searching for 

そこで問題は、私は行を検索しますどのように特定の文字列が、それを印刷し、「含みますか」?

if [[ "$line" == *"LAUNCH TEST"* ]]; then 
      echo $line 
      echo "This was the test found" 
    fi 

しかし、この比較は、そのwhileループの内部では動作しません何らかの理由で、同様

何か。

+1

まさにその目的のために 'grep'と呼ばれるツールがありますが、あなたはそれを使用して検討する必要があります。 –

+0

少なくとも2つのマッチを見ることができる入力例を投稿できますか? – RomanPerekhrest

+0

@LarsFischerあなたには例がありますか? –

答えて

0

あなたはマッチラインとawkを使用することができます試合を次の行に印刷したい場合:

awk '/LAUNCH TEST/{print $0; flag=1; next} {if (flag) print $0;} /.*/{flag=0} ' ~/sample.txt 

このスクリプトは、印刷をオンにする「フラグ」変数を使用しての典型的なawkのイディオムを実証します特定の行のオンとオフを切り替えます。一致した行を2回印刷しないようにするには、nextコマンドを使用してください。

grepを使用すると、しかし、grepのは各試合の間に二重ダッシュでラインを入れます単純に次の行

grep -A1 ~/sample.txt 

を印刷する-A1引数を使用することができます。あなたはgrepを通すことによって、そのことを取り除くことができますが、それはダブルダッシュそのものであることを起こることを正当なラインを排除する可能リスクを実行します。

+0

ファイル名の印刷が望ましくない場合は、次のようなパイプを構築することができます: 'cat filename | grep -A1 "ランチテスト" ' grepは 'filename'を表示せず、テキストだけを出力します。 –

関連する問題