Archlinuxでgrep / awkを使用して、リストからインストールされていないプログラムの数を確認してください。

Archlinuxでgrep / awkを使用して、リストからインストールされていないプログラムの数を確認してください。

リストからインストールされていないパッケージがいくつあるかを確認したいと思います。私はArchlinuxを使用しているので、pacman -Qを使用してパッケージがインストールされていることを確認します。インストールされていない場合は、「エラー: 'パッケージ名'パッケージが見つかりません。」などのメッセージが返されます。

次のように使用できると思いますgrep -c 'error'

pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'

しかし、私には次のように返されます。

エラー: 'bison'パッケージが見つかりません。
エラー: 'pkg-config'パッケージが見つかりません。
0

0を返しますが、2を返したいです。 awkを使用しても機能しません。

pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | awk '/error: / {count++} END {print count}'

私にとって、これは次を返します。

エラー: 'bison'パッケージが見つかりません。
エラー: 'pkg-config'パッケージが見つかりません。

だから私の考えでは、変数がcount印刷されないので値さえ持っていないようです。私も試してみましたが、うまくいかずにwc -l0を返します。

削除されたパッケージの数を印刷する正しい方法は何ですか?

編集:これを行ったときに、次のことが見つかりました。

pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config > tempfile  
cat tempfile

エラーメッセージを含む2行は追加されませんtempfile(残りのコマンド出力は追加されます)。これが問題を解決するのに役立つと思いました。

答え1

問題は、エラーメッセージSTDOUTがに送信されないことですSTDERRSTDERRまた、次のように明示的にリダイレクトする必要があります。

pacman -Q bison patch pkg-config 2>&1 | grep -c 'error'

bashやzshなどがある場合は、|&自動リダイレクトSTDOUTも使用できますSTDERR

pacman -Q bison patch pkg-config |& grep -c 'error'

答え2

エラーはに印刷されますstderrstdoutあなたのパイプ()は出力のみを見ることができます|。パイプの正面にstdoutリダイレクトすると、すべての出力は次のように進みます。stderrstdoutgrep

pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config 2>&1 | grep -c 'error'

答え3

wc -lこれを使用して出力ライン数を計算できます。

したがって、pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error'出力は次のようになります。

error: package 'bison' was not found
error: package 'pkg-config' was not found

pacman -Q autoconf automake binutils bison fakeroot flex gcc libtool m4 make patch pkg-config | grep -c 'error' | wc -lgrepが1行を出力する回数を計算するために実行できます。

関連情報