입력을 받아 텍스트 파일과 일치시키는 작은 쉘 스크립트를 작성 중입니다.
그런데 입력 문자열이 파일의 문자열보다 커서 일치시키고 싶습니다.
사용자 입력:
abc-de-ef-gh1
파일의 텍스트:
This is test,-de-ef-gh,This is test
grep
사용자 입력에 기존 파일을 사용하면 긍정적인 결과를 원합니다.
이 목표를 어떻게 달성할 수 있나요? grep으로는 이 작업을 수행할 수 없습니다.
답변1
패턴이 포함된 파일이 있습니다. grep
해당 옵션을 사용하여 스키마를 읽을 수 있습니다 -f
. 문자열이 $input
패턴과 일치하는지 확인하려면 patterns.txt
다음을 수행 하십시오.
printf '%s\n' "$input" |
if grep -q -f patterns.txt; then
echo 'matches'
else
echo 'does not match'
fi
grep
이는 중간 패턴으로 문자열 내용을 반복합니다 patterns.txt
. 대신 이 문자열을 사용할 수 bash
있습니다.
if grep -q -f patterns.txt <<<"$input"; then
echo 'matches'
else
echo 'does not match'
fi
출력 생성을 중지합니다(종료 상태에만 관심이 있습니다) -q
.grep
패턴이 고정 문자열(정규식이 아님)인 경우 -F
다른 플래그( )와 함께 with를 사용해야 합니다.grep
grep -qF -f ...
답변2
bash
, cut
및 grep
:을 사용하십시오 .
read -p "Hey user, input something: " $n
printf "Match "
grep -m 1 -q -f <(cut -d, -f2 file) <<< "$n" || printf "not "
printf "found.\n"
노트:
- 더 짧은 문자열 내에서 더 긴 문자열을 검색하는 것은 불가능하지만 이것이 실제로 수행하는 작업은 더 짧은 문자열이 존재하는 경우를 찾는 것입니다.문서더 긴 문자열을 일치시킵니다.
cut
중간 필드를 추출하는 데 사용됩니다.문서grep
사용자 입력 문자열의 중간 필드를 검색합니다.printf
피드백을 제공하세요.