Encontre o número de todos os comandos digitados que incluem uma string, usando grep

0

Estou pesquisando no meu log de histórico bash todos os comandos digitados (iniciados) que incluíam a string x . Por alguma razão, o verificador de lição de casa sempre diz que o número que estou dando é maior do que o real.

Aqui está o que eu digitei:

grep -o 'x' "/home/user/.bash_history" | wc -l >> FILE
    
por Ahmed 26.11.2015 / 16:22

2 respostas

3

Eu não sei qual verificador de lição de casa você está se referindo, mas o problema aqui é provavelmente que você não está contando as linhas com x , você está contando as ocorrências de x . O sinal -o faz com que grep imprima apenas a parte correspondente de uma linha, se houver muitos x s na mesma linha, imprimirá cada um deles separadamente:

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

Então, você não quer -o lá. Você também não precisa do wc , é para isso que a opção -c do grep é:

$ history | grep -c x
1001

No futuro, certifique-se de ler a página do manual de um comando antes de usar suas opções. Isso vai lhe poupar muitos problemas.

    
por 26.11.2015 / 16:41
2

Você precisa de uma pesquisa melhor, o comando grep pode pesquisar usando expressões regulares.

Do homem grep :

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

E como "Ulrich Schwarz" disse, você pode usar o parâmetro -c para contar.

Do homem grep :

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

Então, pesquisando através do bash_history para uma execução de comando usando expressões regulares e, em seguida, contando-as:

grep -E "EXP" .bash_history

ou apenas

grep "EXP" .bash_history

Exemplo : se você quiser contar a quantidade de comandos 'rm':

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

ou apenas

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

Exemplo 2 : Se você quiser contar a quantidade de comandos que tem a string X :

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

ou apenas

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

Para mais informações sobre expressões regulares : GNU - grep-expressão-regular-sintaxe

    
por 26.11.2015 / 16:58