Grep string, em seguida, apague a palavra e faça a próxima instrução

0

Eu quero criar o script de shell bash que pode  - encontrar uma string no arquivo  - depois, apague a palavra  - em seguida, reinicie o serviço

Eu tentei este código

Restart.sh

#!/bin/sh
grep -q 'RestartServiceApache' /srv/www/config_apa
if [ $result -eq 1 ];
        then
                sed '/RestartServiceApache/d' "/srv/www/config_apa"
                /etc/init.d/httpd reload
fi

e meu config_apa

Hello my name is nutnud.

#RestartServiceApache

Isso tudo é apenas um arquivo de teste.

e o erro é

./Restart.sh: line 3: [: -eq: unary operator expected

Eu tentei muito script e ele não funciona, há sempre um erro como o grep ou algo do tipo

    
por amita kunprasertkul 30.09.2015 / 06:27

2 respostas

3

No Bourne Shell, para ver o status do código de saída, você pode usar:

$?

Parece que o grep deve dar um status 0 se corresponder a uma linha e um status 1 se ele não corresponder ( link ), portanto, você deseja corresponder ao código de saída 0.

Então você pode fazer isso:

  #!/bin/sh
  grep -q 'RestartServiceApache' /srv/www/config_apa
  if [ $? -eq 0 ];
       then
            sed '/RestartServiceApache/d' "/srv/www/config_apa"
            /etc/init.d/httpd reload
  fi

No entanto, uma maneira mais fácil pode ser encontrada na seguinte resposta:

O grep pode retornar true / false ou Existem métodos alternativos

 if grep -q PATTERN file.txt; then
     echo found 
 else
     echo not found 
 fi

Substitua a parte "echo found" pelo seu código para remover a linha e reinicie o serviço.

    
por 30.09.2015 / 06:44
0

Com o novo GNU sed , isso pode ser feito em uma linha

sed -i '/RestartServiceApache/{e\/etc/init.d/httpd reload
                               d}' /srv/www/config_apa
    
por 30.09.2015 / 10:13

Tags