ファイル内に文字列が存在するかどうかを確認するにはどうすればよいですか

ファイル内に文字列が存在するかどうかを確認するにはどうすればよいですか

329,現在、 に正確な文字列が存在するかどうかを確認する bash スクリプトを作成していますmyfile。 Web を検索していくつかの回答を見つけましたが、-xよりも多くの数値があるため、パラメータを329,使用できませんmyfile。 また、パラメータがないと、 も結果に-x含まれますが、これは望ましくありません。Exists329

私は試した;

if grep -xqFe "329," "myfile"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

出力は次のようになりました。

Not Exists

の中にmyfile;

329, 2, 57

これをどうすれば解決できますか?

答え1

-xここでは関係ありません。つまり、( からman grep) 次のようになります。

-x, --line-regexp
       Select  only  those  matches that exactly match the whole line.
       For a regular expression pattern, this is  like  parenthesizing
       the pattern and then surrounding it with ^ and $.

したがって、これは、探している文字列以外の何も含まれていない行を検索する場合にのみ役立ちます。必要なオプションは次のとおりです-w

-w, --word-regexp
       Select  only  those  lines  containing  matches that form whole
       words.  The test is that the matching substring must either  be
       at  the  beginning  of  the  line,  or  preceded  by a non-word
       constituent character.  Similarly, it must be either at the end
       of  the  line  or followed by a non-word constituent character.
       Word-constituent  characters  are  letters,  digits,  and   the
       underscore.  This option has no effect if -x is also specified.

これは、ターゲット文字列がスタンドアロンの「単語」として、または「非単語」文字で囲まれた文字列として見つかった場合に一致します。また、-Fここでは は必要ありません。これは、パターンに正規表現で特別な意味を持つ文字が含まれており、それを文字通り検索したい場合にのみ役立ちます (例*)。また、 は-eまったく必要ありません。これは、複数のパターンを指定したい場合に必要になります。つまり、次のものを探しています。

if grep -wq "329," myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

数字が行の最後の数字で、その後に何もない場合にも一致させたい場合には、拡張正規表現を有効にして一致させること,ができます。grep -Eどちらかa329の後にコンマ ( 329,) が続くか、329行末の a ( 329$) になります。これらは次のように組み合わせることができます。

if grep -Ewq "329(,|$)" myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

答え2

別の選択肢としては、次のものが考えられます。

if cat myfile | tr "," "\n" | grep -xqF "329"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

よろしく

関連情報