使用 grep 查找包含字符串的所有键入命令的数量

使用 grep 查找包含字符串的所有键入命令的数量

我正在 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 正则表达式语法

相关内容