我正在 bash 历史日志中搜索包含 string 的所有键入(启动)命令x
。出于某种原因,作业检查员总是说我给出的数字比实际的数字大。
这是我输入的内容:
grep -o 'x' "/home/user/.bash_history" | wc -l >> FILE
答案1
我不知道您指的是哪个作业检查器,但这里的问题可能是您没有计算 的行数x
,而是计算 的出现次数x
。该-o
标志使得grep
仅打印一行的匹配部分,如果x
同一行上有很多 s,它将分别打印每个:
$ echo "xxx" | grep -o x
x
x
x
所以,你不想要-o
那里。您也不需要wc
,这就是 grep-c
选项的用途:
$ history | grep -c x
1001
将来,请确保在使用命令的选项之前阅读命令的手册页。这将为您省去很多麻烦。
答案2
您需要更好的搜索,grep命令可以使用正则表达式进行搜索。
来自 man grep:
DESCRIPTION
grep searches the named input FILEs for lines containing a
match to the given PATTERN.
正如“Ulrich Schwarz”所说,您可以使用 -c 参数来计数。
来自 man 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 正则表达式语法