몇 글자만 알고 있는 파일에서 무언가를 검색하고 싶습니다.

몇 글자만 알고 있는 파일에서 무언가를 검색하고 싶습니다.

질문이 있습니다. 매개변수 $1로 일부 헌장을 얻는 스크립트를 작성 중입니다. 다음과 같이 여러 줄이 기록된 "drinks.txt" 파일이 있습니다.

Cocacola
juice
CocaPepsi

예를 들어 매개변수 "co"를 전달하면 Coca-Cola와 Coca-Cola가 반환됩니다. 내 IF 조건이 실패합니다. 이것은 내 코드입니다.

searchingParameter=$1
for drink in `cat drinks.txt`;do
   if [ "$drink" == "$1*" ]; then
      echo "$drink"
   fi
done

따라서 $1 + *가 포함된 모든 음료가 인쇄됩니다. 이에 대해 IF를 수행하는 올바른 방법은 무엇입니까?

미리 감사드립니다.

답변1

쉘 루프를 사용하여 이 작업을 수행하는 것은 어색하고 오류가 발생하기 쉽습니다. 예를 들어 drinks.txt파일에 한 줄이 포함되어 있거나 *공백으로 둘러싸여 있으면 현재 디렉터리의 파일 이름으로 확장됩니다.

대신 다음을 사용하세요 grep.

grep -iF 'co' drinks.txt

여기서는 대소문자를 구분하지 않는 일치를 위해 grepwith를 사용합니다. -i-F옵션은 grep이 모드를 다음과 같이 사용해야 함 을 의미합니다.정규 표현식이 아닌(여기서는 별로 중요하지 않지만회의패턴에 *또는 .기타 특수 정규식 기호와 같은 문자가 포함된 경우 중요합니다.

co이 명령은 문자열 또는 Co을 포함하는 cO모든 완전한 행을 반환합니다 CO.

스크립트의 일부로:

#!/bin/sh

grep -iF -e "$1" drinks.txt

여기서 사용 하는 것은 -e"다음 매개변수는 패턴이다"입니다. 이를 수행하지 않고 $1대시로 시작하면 옵션으로 처리됩니다 grep.

단어 시작 부분에서 일치를 강제하려면 다음을 사용할 수 있습니다.

grep -i -e '\b'"$1" drinks.txt

또는

grep -i -e '\<'"$1" drinks.txt

where \b\<둘 다 단어 경계에서 일치합니다. -F이제 패턴이 정규식이므로 여기서 옵션을 제거해야 합니다 . 이는 또한 의 모든 정규식 문자가 $1특별하다는 것을 의미합니다.

관련 정보