cat | grep を使用してファイルに文字列が存在するかどうかを確認する

cat | grep を使用してファイルに文字列が存在するかどうかを確認する

皆さんこんにちは

目的: ファイル内に文字列が存在するかどうかを確認し、それに応じてアクションを実行する

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"

行が存在する場合と存在しない場合の両方において、出力には常に「行が存在します、スキップしています」と表示されます。

出力を変数(例:x)に追加し、if文の行を変数に置き換えると正しい出力が生成されます。

変数ルートを「スキップ」してコマンドを直接実行するにはどうすればよいですか?

答え1

grep条件コマンドとして使用できます。パターンが一致すると true を返します。ここでは、固定文字列検索 ( -F) と、おそらく完全な行 ( -x) での一致が必要です。

if sudo cat /etc/sudoers |
  grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
  echo found
else
  echo not found
fi

または、構成により次のコマンドに加えてsudoers次のコマンドを実行できる場合:grepcat

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-qgrep終了ステータスを介して true/false ステータスを返すだけで、stdout には何も出力しないように指示します。

sudoers 設定には、このアプローチでは考慮されない他の設定ファイルが含まれる場合があることに注意してください。ユーザーがメンバーであるグループに付与される権限についても同様です。

代わりにを使用することをお勧めしますsudo -lU "$USER"

関連情報