stringを含むすべての入力(開始)コマンドのbash履歴ログを取得していますx
。何らかの理由で、宿題検査官は私が出した数字が実際より高いと言い続ける。
私が入力した内容は次のとおりです。
grep -o 'x' "/home/user/.bash_history" | wc -l >> FILE
答え1
どのタスクチェッカーを話しているのかわかりませんが、問題は行数ではなくx
発生回数を数えることですx
。このフラグは行内の一致する部分だけを印刷し-o
、同じ行にsが多い場合はそれぞれを別々に印刷します。grep
x
$ 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正規表現構文