Bash 스크립트에 대한 입력에 파일의 문자 단어가 4개 이상 포함되어 있는지 확인하는 방법

Bash 스크립트에 대한 입력에 파일의 문자 단어가 4개 이상 포함되어 있는지 확인하는 방법

문자열의 일부에 주어진 파일(words.txt)의 4자 이상의 단어가 포함되어 있는지 테스트하고, 그렇다면 인쇄해야 합니다. 이것은 지금까지 내 코드입니다.

if [[ grep -q *"$Str"* words.txt ]]; then
   echo Yes
else
   echo No

제대로 일치하지 못합니다. 내가 뭘 잘못하고 있는지 어떤 아이디어가 있습니까?

따라서 임의의 단어가 포함된 큰 파일이 있고 입력한 문자열에 파일에 있는 모든 단어의 하위 문자열이 포함되어 있는지 테스트해야 합니다. 예: "ehhelloef"라는 문자열을 입력하고 Words.txt에 "hello"라는 단어가 포함되어 있는 경우 그것은 테스트가 필요합니다. 게다가 Words.txt에 4글자가 넘는 단어만 테스트하면 됩니다.

답변1

이것[[ 확장된 테스트특정 작업을 수행하도록 설계되었습니다.운영자명령보다는.


다음 awk명령이 작동해야 합니다.

awk -vcheck="$Str" '(check ~ $1 && length($1) > 3) {found="yes"} END {if (found=="yes") {print "yes"} else {print "no"}}' words.txt

파일의 각 단어가 입력 문자열의 하위 문자열인지, 단어 길이가 3보다 큰지 확인합니다. 그렇다면 변수는 foundyes로 설정됩니다. 파일이 완료 되면 yes와 같은지 awk확인 found하고 그렇다면 인쇄하고 yes그렇지 않으면 인쇄합니다.no


만약 너라면필요셸에서 print yes/no 이외의 항목을 구성하는 경우 다음과 같이 print 문을 종료 문으로 바꿀 수 있습니다.

if awk -vcheck="$Str" '(check ~ $1 && length($1) > 3) {found="yes"} END {if (found=="yes") {exit 0} else {exit 1}}' words.txt
then
  echo yes
else
  echo no
fi

답변2

한 가지 방법은 다음과 같습니다.

  1. 4글자 이상의 단어를 추출합니다.words.txt

  2. grep -Ff변수 내용에 대해 고정 문자열 일치를 수행 하려면 결과를 "파일"로 전달합니다 .

전임자. 배시 사용프로세스 교체그리고여기에 있는 문자열

grep -Fqf <(grep '....' words.txt) <<< "$str" && echo "found" || echo "not found"

관련 정보