Verifique se um arquivo contém um determinado padrão?

1
#!/usr/bin/expect -f

ps

ps -ef > test.txt

Agora, se eu quiser verificar se o test.txt tem certas palavras-chave presentes, como vamos?

Digamos "apache" ou "rápido".

Podemos usar a declaração if aqui, se sim, como?

    
por Koshur 10.02.2016 / 16:19

2 respostas

1

em primeiro lugar, a primeira linha shebang não é o que você deseja para o seu script. esperar como um shell tem um uso limitado e este não é um deles

a primeira linha deve ser algo como

#!/bin/bash

no seu caso

então

ps -ef > test.txt
grep -e fast -e apache test.txt

imprimirá todas as linhas contendo uma dessas palavras.

ou você pode pular a escrita para a etapa de arquivo e fazê-lo em uma linha como tal:

ps -ef | grep -e fast -e apache 

EDIT para verificação condicional:

ps -ef | grep -e fast -e apache | grep -v grep > dev/null; result=${?}
if [ ${result} -eq 0 ]
then
  echo "Found one or more occurrences of 'apache' and/or 'fast'"
else
  echo "Searched strings were not found"
fi
    
por 10.02.2016 / 16:26
0

Você pode declarar um array aqui

#!/bin/bash

string=('fast' 'apache')

ps -ef > test.txt

for i in "$string[@]"
do
    grep "$i" test.txt
done

Ou você pode fazer isso diretamente na linha ps para salvar apenas esses processos

#!/bin/bash

string=('fast' 'apache')

for i in "$string[@]"
do
    ps -ef | grep "$i" > ps_output_of_$i.txt
done

Dê uma chance

    
por 10.02.2016 / 17:46