grep 字符串然后删除单词并执行下一条语句

grep 字符串然后删除单词并执行下一条语句

我想创建 bash shell 脚本,它可以 - 在文件中查找字符串 - 然后删除单词 - 然后重新启动服务

我已经尝试过这段代码

重启.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

将“echo found”部分替换为您的代码以删除该行并重新启动服务。

答案2

与新GNU sed一行即可完成

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

相关内容