リダイレクトコマンド

リダイレクトコマンド

検索スクリプトを作成しました。.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

角かっこ式は、次に囲まれた文字のリストです。[そして]。リストの最初の文字がカラットの場合、リストのすべての単一文字と一致します。^その後、すべての文字と一致します。いいえリストにあります。

おすすめ記事