문자열이 텍스트 파일에없는 경우 일부 셸 명령을 실행하려고합니다. 이 줄을 명령 줄에 붙여 넣으면 오류가 발생합니다.쉘 명령 - 명령의 출력을 기반으로 한 조건?
if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
오류 : 당신은 그냥 사용할 수 있도록,
-bash: [: -eq: unary operator expected
문자열이 텍스트 파일에없는 경우 일부 셸 명령을 실행하려고합니다. 이 줄을 명령 줄에 붙여 넣으면 오류가 발생합니다.쉘 명령 - 명령의 출력을 기반으로 한 조건?
if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
오류 : 당신은 그냥 사용할 수 있도록,
-bash: [: -eq: unary operator expected
당신은 =
대신 -eq
사용해야합니다. 또한 따옴표가 필요합니다. cat
이 필요하므로 grep
는 인자로 파일 이름을 취할 수
if [ "$(cat textfile.txt | grep 'search string')" = "" ]; then; echo "some string"; fi;
참고. grep
의 리턴 값을 직접 사용할 수도 있습니다. grep은 검색 문자열이 없으면 1을 리턴합니다.
if [ "$(grep 'search string' textfile.txt)" ]; then
echo "some string";
fi
더욱 간단한 방법은 논리 및 &&
을 사용하는 것입니다.
grep "search string" textfile.txt && echo "some string"
0을 반환됩니다 grep
명령 요청 된 라인은 (1 그렇지 않은 경우,이 오류가있는 경우) 발견 된 경우 :
grep "search string" textfile.txt >/dev/null 2>&1
if [[ $? -ne 0 ]] ; then
echo 'Not found'
fi
이 실제로 인 경우 문자열을 사용하고 싶지 않으므로 (사용하지 않아야 함)에 대한 인수가 너무 많아서는 안됩니다.명령 : 당신이 비교 []
를 사용하는 경우
if [ "$(cat textfile.txt | grep 'search string')" == "" ] ; then
echo "It's not there!"
fi
grep -F -q -e 'search string' textfile.txt || echo 'Not found'
참고 :
-F
정규 표현식으로 검색 문자열의 해석을 방지 할 수 있습니다.-q
은 모든 출력을 억제하고 첫 번째 인스턴스가 발견 된 직후 반환하므로 문자열이 큰 파일의 시작 부분에서 발생하면 검색 속도가 훨씬 빨라집니다.-e
은 패턴을 명시 적으로 지정하여 대시로 시작하는 패턴을 허용합니다.우아함. 어딘가에 누군가가 bash를 perl'[[$ ('불행히도. – msw
이 경우 대괄호가 필요하지 않습니다. [
은 실제로 명령이므로, 명령을 사용할 위치에서 모든 명령을 사용할 수 있습니다. 여기서는 grep
을 사용할 수 있습니다. grep
은 파일 이름을 인수로 사용할 것이므로 cat
을 사용할 필요가 없습니다. 또한 세미콜론이 너무 많습니다.
if grep -q "search string" textfile.txt; then echo "some string"; fi
또는
if grep "search string" textfile.txt > /dev/null 2>&1; then echo "some string"; fi
따옴표를 변경할 필요가 없습니다. 이것은 완벽하게 유효한 bash입니다 :' "$ (cat textfile.txt | grep"검색 문자열 ")" – Tyilo