문자열의 일부에 주어진 파일(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보다 큰지 확인합니다. 그렇다면 변수는 found
yes로 설정됩니다. 파일이 완료 되면 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
한 가지 방법은 다음과 같습니다.
4글자 이상의 단어를 추출합니다.
words.txt
grep -Ff
변수 내용에 대해 고정 문자열 일치를 수행 하려면 결과를 "파일"로 전달합니다 .
전임자. 배시 사용프로세스 교체그리고여기에 있는 문자열
grep -Fqf <(grep '....' words.txt) <<< "$str" && echo "found" || echo "not found"