문자열을 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

관련 정보