[bash] Bash를 사용하여 파일에 특정 문자열이 포함되어 있는지 확인하는 방법

파일에 bash에 특정 문자열이 포함되어 있는지 확인하고 싶습니다. 이 스크립트를 사용했지만 작동하지 않습니다.

 if [[ 'grep 'SomeString' $File' ]];then
   # Some Actions
 fi

내 코드에 어떤 문제가 있습니까?



답변

if grep -q SomeString "$File"; then
  Some Actions # SomeString was found
fi

당신은 [[ ]]여기에 필요하지 않습니다 . 명령을 직접 실행하십시오. -q문자열을 찾을 때 표시 될 필요가없는 경우 옵션을 추가하십시오 .

grep명령은 검색 결과에 따라 종료 코드 0 또는 1을 반환합니다. 무언가가 발견되면 0; 그렇지 않으면 1입니다.

$ echo hello | grep hi ; echo $?
1
$ echo hello | grep he ; echo $?
hello
0
$ echo hello | grep -q he ; echo $?
0

의 조건으로 명령을 지정할 수 있습니다 if. 명령이 종료 코드에서 0을 리턴하면 조건이 true임을 의미합니다. 그렇지 않으면 거짓.

$ if /bin/true; then echo that is true; fi
that is true
$ if /bin/false; then echo that is true; fi
$

보시다시피 여기에서 프로그램을 직접 실행하십시오. 추가 []또는 없음 [[]].


답변

원하는 것을 수행하는 방법을 알려주는 다른 답변 외에도 잘못된 것이 무엇인지 설명하려고합니다.

Bash에서 if명령을 따릅니다. 이 명령의 종료 코드가 0이면 then부품이 실행되고 그렇지 않으면else 부품이 실행됩니다.

다른 답변에서 설명한대로 모든 명령 으로이 작업을 수행 할 수 있습니다. if /bin/true; then ...; fi

[[파일 존재, 변수 비교와 같은 일부 테스트 전용 내부 bash 명령입니다. 마찬가지로 거의 동일한 테스트를 수행하지만 최종 인수로 필요한 [외부 명령 (일반적으로에 위치 함 /usr/bin/[)이 왼쪽에 공백으로 채워져 있어야합니다.]]]] .

여기 필요 [[도 없습니다[ .

또 다른 것은 물건을 인용하는 방법입니다. bash에는 따옴표 쌍이 중첩되는 경우가 하나뿐입니다 "$(command "argument")". 그러나 인용 된 단위 'grep 'SomeString' $File'이기 때문에 하나의 단어 만 있습니다.이 'grep '단위는에 연결 SomeString되고 다시 연결됩니다 ' $File'. $File작은 따옴표를 사용하기 때문에 변수 는 값으로 대체되지 않습니다. 올바른 방법은 grep 'SomeString' "$File"입니다.


답변

파일 에 특정 문자열이 포함되어 있지 않은지 확인하려면 다음과 같이하십시오.

if ! grep -q SomeString "$File"; then
  Some Actions # SomeString was not found
fi


답변

##To check for a particular  string in a file

cd PATH_TO_YOUR_DIRECTORY #Changing directory to your working directory
File=YOUR_FILENAME
if grep -q STRING_YOU_ARE_CHECKING_FOR "$File"; ##note the space after the string you are searching for
then
echo "Hooray!!It's available"
else
echo "Oops!!Not available"
fi


답변

가장 짧은 (올바른) 버전 :

grep -q "something" file; [ $? -eq 0 ] && echo "yes" || echo "no"

로 쓸 수도 있습니다

grep -q "something" file; test $? -eq 0 && echo "yes" || echo "no"

그러나이 경우 명시 적으로 테스트 할 필요가 없으므로 다음과 동일합니다.

grep -q "something" file && echo "yes" || echo "no"


답변

문자열이 전체 줄과 일치하는지 확인하고 고정 문자열 인 경우 다음과 같이 할 수 있습니다

grep -Fxq [String] [filePath]

 searchString="Hello World"
 file="./test.log"
 if grep -Fxq "$searchString" $file
    then
            echo "String found in $file"
    else
            echo "String not found in $file"
 fi

man 파일에서 :

-F, --fixed-strings

          Interpret  PATTERN  as  a  list of fixed strings, separated by newlines, any of

which is to be matched.
          (-F is specified by POSIX.)
-x, --line-regexp
          Select only those matches that exactly match the whole line.  (-x is specified by

POSIX.)
-q, --quiet, --silent
          Quiet; do not write anything to standard output.  Exit immediately with zero

status  if  any  match  is
          found,  even  if  an error was detected.  Also see the -s or --no-messages

option.  (-q is specified by
          POSIX.)


답변

grep -q [PATTERN] [FILE] && echo $?

0패턴이 발견되면 종료 상태는 (true)입니다. 그렇지 않으면 공백입니다.