数文字だけ知っているファイルから何かを検索したいと思います。

数文字だけ知っているファイルから何かを検索したいと思います。

質問があります。パラメータ$ 1でいくつかのチャーターを取得するスクリプトを作成しています。次のように、複数行が記録された「drinks.txt」ファイルがあります。

Cocacola
juice
CocaPepsi

たとえば、パラメータ「co」を渡すと、Coca-ColaとCoca-Colaが返されます。私のIF条件は失敗します。これは私のコードです。

searchingParameter=$1
for drink in `cat drinks.txt`;do
   if [ "$drink" == "$1*" ]; then
      echo "$drink"
   fi
done

したがって、$ 1 + *を含むすべての飲み物が印刷されます。これに対してIFを実行する正しい方法は何ですか?

よろしくお願いします。

ベストアンサー1

シェルループを使用してこれを行うのは厄介でエラーが発生しやすいです。たとえば、drinks.txtファイルに 1 行が含まれている場合、または*スペースで囲まれている場合は、現在のディレクトリのファイル名に展開されます。

代わりに、以下を使用してくださいgrep

grep -iF 'co' drinks.txt

ここでは、大文字と小文字を区別しない一致にgrepwithを使用します。-iこの-Fオプションは、grepこのモードを次のように使用する必要があることを意味します。ひも正規表現ではない(ここではあまり重要ではありませんが、会議パターンに*その他.の特殊正規表現記号などの文字が含まれている場合は重要です。

coこのコマンドは、文字列またはCoを含むcOすべての完全な行を返しますCO

スクリプトの一部として:

#!/bin/sh

grep -iF -e "$1" drinks.txt

ここで使用するのは、-e「次のパラメータはパターンです」です。これを行わず$1にダッシュから始めると、オプションとして扱われますgrep

単語の先頭で一致を強制するには、次のようにします。

grep -i -e '\b'"$1" drinks.txt

または

grep -i -e '\<'"$1" drinks.txt

where\b\<その両方は単語の境界で一致します。-Fパターンは正規表現なので、ここでオプションを削除する必要があります。これはまた、のすべての正規表現文字が$1特別であることを意味します。

おすすめ記事