grepを使用して、文字列を含むすべてのキーストロークの数を見つけます。

grepを使用して、文字列を含むすべてのキーストロークの数を見つけます。

stringを含むすべての入力(開始)コマンドのbash履歴ログを取得していますx。何らかの理由で、宿題検査官は私が出した数字が実際より高いと言い続ける。

私が入力した内容は次のとおりです。

grep -o 'x' "/home/user/.bash_history" | wc -l >> FILE

答え1

どのタスクチェッカーを話しているのかわかりませんが、問題は行数ではなくx発生回数を数えることですx。このフラグは行内の一致する部分だけを印刷し-o、同じ行にsが多い場合はそれぞれを別々に印刷します。grepx

$ echo "xxx" | grep -o x
x
x
x

だから、あなたはそこからそれをしたくありません-o。どちらも必要ありませんwc。これが grep-cオプションの目的です。

$ history | grep -c x
1001

今後は、そのオプションを使用する前に、コマンドのマニュアルページをお読みください。これは多くの問題を解決します。

答え2

より良い検索が必要です。grep正規表現を使用してコマンドを検索できます。

男 grep から:

DESCRIPTION
grep  searches  the  named  input  FILEs for lines containing a 
match to the given PATTERN.

「Ulrich Schwarz」が述べたように、-cパラメータを使用して計算できます。

男 grep から:

-c, --count
Suppress normal output; instead print a count of matching lines for
each input file.

したがって、正規表現を使用してbash_historyからコマンド実行を取得し、カウントを計算します。

grep -E "EXP" .bash_history

そうでなければ

grep "EXP" .bash_history

はい: 'rm' コマンドの数を数えるには、次のようにします。

grep -E ^rm* /home/<user>/.bash_history -c

そうでなければ

grep ^rm* /home/<user>/.bash_history -c

実施例2:この文字列を含む命令の数を数えたい場合X:

grep -E X /home/<user>/.bash_history -c

そうでなければ

grep X /home/<user>/.bash_history -c

正規表現の詳細:GNU - grep正規表現構文

関連情報