파일에 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)입니다. 그렇지 않으면 공백입니다.