grepコマンドを使用した複数の文字列の処理

grepコマンドを使用した複数の文字列の処理

ロジックはどのように書くのですか?

Test total=100
Test scored=80 
Tests failed=0

ファイルに存在するTest totalかどうかを確認するには、bashファイルにスクリプトを作成する必要があります。 grepコマンドを使用する必要がありますが、この場合は新しい行を確認する方法は?Test scoredTests failed=0

そして、100、80という数字は見つける必要はありません。直前のテキストです。

答え1

    grep -e "Test total=[0-9][0-9]*$" -e "Test scored=[0-9][0-9]*$" -e "Tests failed=[0-9][0-9]*$" foofile

下記の入力の最初の3行だけを一致させたい場合を考えてください。

 Test total=100
 Test scored=80
 Tests failed=0

 Test total=100 alpha
 Test scored=80 beta
 Tests failed=0 gamma

 Test total=
 Test scored=
 Tests failed=

答え2

bashとgrepを使用すると、関数内で複数のgrep呼び出しの戻り状態をテストできます。たとえば、次のようになります。

#!/usr/bin/env bash
failed_zero () {
    grep -q "Test total" "$1" || grep -q "Test scored" "$1" || grep -q "Test failed=0" "$1"
    return $?
}

# test first file name on command line
failed_zero $1
echo $?

答え3

努力する

found=$( egrep  "Test total|Test scored|Tests failed" -c  file )
if [ $found -eq 3 ]
then
  ## all three test
else
  ## some failed
fi

どこ

  • egrepgrep 拡張を許可します (例: |(または) を使用)。
  • -c一致する行の数を提供します。
  • $( )コマンドの結果を変数として返します。

関連情報