検索スクリプトを作成しました。.ini特定の単語を送信してください。
これ.iniファイルの名前は2つのうちの1つです(家庭)。構成ファイルまたは構成ファイル)なので、両方を確認する必要があります。
if
私は次の文を処理するためにロジックを使用しますOR
。
HAS_SOME_WORD=FALSE
if [ "$(grep -v '^;\|^\[' "path_to_file/config.ini" | \
grep -c '\\some_word')" -ge 1 ] \
|| [ "$(grep -v '^;\|^\[' "path_to_file/configuration.ini" | \
grep -c '\\some_word')" -ge 1 ]; then
HAS_SOME_WORD=TRUE
else
HAS_SOME_WORD=FALSE
fi
私は次から始まる行を避けています。";"または「[」単語を探すとき、あなたが探している検索にその単語を含めないでください。「\ある単語」。
私が望むのは、2つのファイルのうちの1つが存在しないときにgrepエラーメッセージを除外することです。つまり:
grep: path_to_file/config.ini: No such file or directory
または:
grep: path_to_file/configuration.ini: No such file or directory
/dev/null
スクリプトの実行時に出力をリダイレクトすることでこれを防ぐことができました。
./search_script.sh 2>/dev/null
if
しかし、スクリプトが呼び出されるときではなく、コード自体にこのリダイレクトを含めたいと思います。
これをどのように実装しますか?私がやろうとしていることを達成するためのより効率的な方法はありますか?
-q
エラーメッセージの印刷を避けるためにパラメータを追加してみましたが、grep
役に立ちませんでした。また、2>/dev/null
各文の最後にリダイレクトを追加してみましたが、if
正しい構文を適用していないようです。
ベストアンサー1
grep
複数のファイルを検索してコードを簡素化-v
できるので、次のことを試してください。-c
cd "path_to file"
if grep -qs '^[^;[].*\\some_word' config.ini configuration.ini ; then
# ...etc
fi
cd -
grep
長いフォーマットオプション:
grep --quiet --no-messages '^[^;[].*\\some_word' \
config.ini configuration.ini
OPコード-v
(または--invert-match
)と2番目のコードは、正規表現などの操作を一度に実行できるため、grep
必要ありません。^[^;[]
からman grep
:
角かっこ式は、次に囲まれた文字のリストです。[そして]。リストの最初の文字がカラットの場合、リストのすべての単一文字と一致します。^その後、すべての文字と一致します。いいえリストにあります。