Unixで正確な文字列を検索する

Unixで正確な文字列を検索する

ファイルがありますが、xyz.txt、1行に1つの文字列。
検索はどうですか?xyz.txt正確に一致するには?
たとえば、入力文字列を取得します。defabc、他のアプリケーションから。見つかった
場合はdefabc返却する必要があります。本物、その他間違った。で正規表現を使用できますかgrep

サンプルファイル: xyz.txt:

abc
def
abc_def
def_abc
abcdef
defabc
uvx

ベストアンサー1

正しい一致を見つけるには、この-Fオプションを使用しますgrep(正規表現はオフ)。

$ grep -F "defabc" xyz.txt
defabc

greptrue または false をテストできるように、適切な戻りコードを設定します。

$ if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi
True
$ if grep -qF "Defabc" xyz.txt; then echo True; else echo False; fi
False

grep戻りコードのみを設定したいので、このオプションは静かに(通常の出力を省略)コマンドを発行-qするために使用されます。grep

一致をフルワードに制限

一致したいがdefabc一致しない場合は、単語全体に一致を制限するdefabc1オプションを追加できます。-w

if grep -qFw "defabc" xyz.txt; then echo True; else echo False; fi

man grep「単語」がどのように定義grepされているかを説明してください。

-w, --word 正規表現
単語全体を構成する項目を含む行のみを選択してください。テストでは、一致する部分文字列が行の先頭にあるか、単語を作成しない文字が前にある必要があります。繰り返しますが、行の末尾にあるか、単語を形成しない文字が後に続く必要があります。
単語を構成する文字は、文字、数字、下線です。

シェル変数から出力を取得する

使用するコマンドの出力をキャプチャするにはコマンドの置き換えその形態は$(...)次のとおりです。

$ r=$(if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi)
$ echo $r
True

シェル変数から終了コードを取得する

grep -qF "defabc" xyz.txt
r=$?

r一致するものがある場合は0、一致するものがない場合は1、別のエラーが発生した場合は2

おすすめ記事