質問があります。パラメータ$ 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
ここでは、大文字と小文字を区別しない一致にgrep
withを使用します。-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
特別であることを意味します。