grep을 사용하여 경로가 포함된 두 문자열 변수 사이의 하위 문자열을 찾습니다.

grep을 사용하여 경로가 포함된 두 문자열 변수 사이의 하위 문자열을 찾습니다.

문자열 변수를 사용하여 한 경로가 다른 경로 내에 존재하는지 확인하고 싶습니다.

내 스크립트:

#!/bin/bash

HAYSTACK="/cygdrive/d/var/www/html/adm4"
NEEDLE="/cygdrive/d/var/www/html"

# first try
#grep -q "$NEEDLE" "$HAYSTACK"

#second try
grep -q "${NEEDLE}" "${HAYSTACK}"

if [ $? -eq 0 ] ; then
    echo  "Your string has been found"
else
    echo "Your string has not been found"
fi

결과:

me@localhost ~]$ ./testbash
grep: : No such file or directory
Your string has not been found

이것이 내가 더 많은 일을 해야 할 길이기 때문에 나는 의심한다.

답변1

Grep에는 이 형식의 명령이 필요하므로 grep [options] PATTERN [FILE...]두 번째 문자열을 스캔할 파일로 처리합니다. 한 줄이면 stdin으로 보낼 수 있습니다.

echo $haystack | grep $needle

또는 원하는대로. 어쩌면 여기에 문자열이 있을 수도 있습니다.

grep $needle <<< $haystack

답변2

==양식을 사용할 때 Bash에는 비교 연산자와 일치하는 패턴이 내장되어 있으므로 [[ ]]grep 호출을 완전히 피하기 위해 다음을 수행할 수 있습니다.

if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
    echo "Your string has been found"
else
    echo "Your string has not been found"
fi

더 복잡한 일치를 수행해야 하는 경우 Bash는 정규식 및 =~연산자 일치도 지원합니다.

관련 정보