シェルコマンドを使用して、特定の文字列が存在するかどうかシェルスクリプトの出力を確認します。

シェルコマンドを使用して、特定の文字列が存在するかどうかシェルスクリプトの出力を確認します。

次の出力を返すシェルスクリプト(test1.sh)があります。

 Employee ID          emp Type  return type  Admin User
   us321000034006755    ITdept      access    Itadminuser

次のコマンドを使用したので、出力にITdept文字列が含まれていることを確認したいと思います。

if ./test1.sh | grep -q 'ITdept'; 
then
    echo "found"
else
    echo "Not found"
fi

これに加えて、従業員ID us321000034006755文字列も確認したいと思います。これは、使用中のコマンドで有益な結果を返さずにこれを行う方法がわからないためです。私は何を逃したことがありませんか?どんな提案でもいいでしょう。

ベストアンサー1

出力に文字列が含まれているとしますus321000034006755(separator)ITdept

if cmd | grep -q '[[:<:]]us321000034006755[[:>:]][[:space:]]*[[:<:]]ITdept[[:>:]]'; then
   ...
fi

変数に2つの部分文字列がある場合:

if cmd | grep -q "[[:<:]]$user_id[[:>:]][[:space:]]*[[:<:]]$user_dept[[:>:]]"; then
   ...
fi

単語の境界で一致[[:<:]]します。[[:>:]]


以下を使用すると、これを行う方がはるかにawk簡単になります。Roman Perechrestが提案したとおりまたは

cmd | awk '$1 == "us321000034006755" && $2 == "ITdept" { print "found"; exit } END { print "not found" }'

おすすめ記事