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つの方法は次のとおりです。

  1. 4文字以上の単語を抽出します。words.txt

  2. grep -Ff変数の内容に対して固定文字列の一致を実行するには、結果を「ファイル」に渡します。

前任者。バッシュを使うプロセスの交換そしてここにある文字列

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

関連情報