文字列をgrepした後、単語を削除して次の文を実行します。

文字列をgrepした後、単語を削除して次の文を実行します。

ファイル内の文字列を見つけて、その単語を削除してサービスを再起動するbashシェルスクリプトを作成したいと思います。

私はこのコードを試しました

再起動.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

そして私のconfig_apa

Hello my name is nutnud.

#RestartServiceApache

これは単なるテストファイルです。

エラーは次のとおりです。

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

たくさんのスクリプトを試しましたが、うまくいきません。常にgrepできないというエラーが発生します。

答え1

Bourne Shellで終了コードのステータスを表示するには、次のものを使用できます。

$?

grepが行と一致する場合は0状態を提供し、一致しない場合は1状態を提供する必要があるようです(http://www.gnu.org/software/grep/manual/html_node/Exit-Status.html)、したがって終了コード0と一致しようとしています。

だからあなたはこれを行うことができます:

  #!/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

しかし、次の答えでより簡単な方法を見つけることができます。

grepはtrue / falseを返すことができますか?それとも別の方法がありますか?

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

その行を削除してサービスを再起動するには、「エコー発見」部分をコードに置き換えます。

答え2

新しいGNU sed一行で完成

sed -i '/RestartServiceApache/{e\/etc/init.d/httpd reload
                               d}' /srv/www/config_apa

関連情報