文字列の一部に指定されたファイル(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
1つの方法は次のとおりです。
4文字以上の単語を抽出します。
words.txt
grep -Ff
変数の内容に対して固定文字列の一致を実行するには、結果を「ファイル」に渡します。
前任者。バッシュを使うプロセスの交換そしてここにある文字列
grep -Fqf <(grep '....' words.txt) <<< "$str" && echo "found" || echo "not found"