[解決済み】Bashでファイルに文字列が存在するかどうかをテストする方法は?
質問
ディレクトリ名を含むファイルを持っています。
my_list.txt
:
/tmp
/var/tmp
ディレクトリ名を追加する前に、その名前がすでにファイル内に存在するかどうかをBashで確認したいのですが。
どのように解決するのですか?
grep -Fxq "$FILENAME" my_list.txt
終了ステータスは、名前が見つかった場合は0(true)、見つからなかった場合は1(false)、なので。
if grep -Fxq "$FILENAME" my_list.txt
then
# code if found
else
# code if not found
fi
説明
の該当箇所を紹介します。
のマニュアルページです。
grep
:
grep [options] PATTERN [FILE...]
-F
,--fixed-strings
PATTERNを、改行で区切られた固定文字列のリストとして解釈し、そのいずれかにマッチさせる。
-x
,--line-regexp
行全体と完全に一致するものだけを選択します。
-q
,--quiet
,--silent
標準出力に何も書き込まない。エラーが検出された場合でも、一致するものがあれば直ちにゼロステータスで終了する。また
-s
または--no-messages
オプションで指定します。
エラー処理
コメントで正しく指摘されているように、上記のアプローチでは、エラーケースをあたかも文字列が見つかったかのように黙って扱います。もし、別の方法でエラーを処理したい場合は
-q
オプションを使用し、終了ステータスに基づいてエラーを検出します。
通常、選択行が見つかれば0、そうでなければ1が終了ステータスです。しかし、エラーが発生した場合、終了ステータスは 2 になります。
-q
または--quiet
または--silent
オプションが使用され、選択された行が見つかります。ただし、POSIXでは、以下のようなプログラムに対してのみ、選択された行を見つけることが義務付けられています。grep
,cmp
およびdiff
したがって、移植性の観点から、2と厳密に等しいかどうかではなく、この一般的な条件をテストするロジックを使用することが推奨されます。
からの通常の出力を抑制するために
grep
にリダイレクトすることができます。
/dev/null
. 標準エラーは無指向性のままであることに注意してください。
grep
はコンソールに表示されます。
この3つのケースを処理するために
case
ステートメントを使用します。
case `grep -Fx "$FILENAME" "$LIST" >/dev/null; echo $?` in
0)
# code if found
;;
1)
# code if not found
;;
*)
# code if an error occurred
;;
esac
関連
-
[解決済み] Mips ユーザー入力文字列の保存方法
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] OCaml - intをstringに変換する方法は?
-
[解決済み] MIPSで文字列の最初の文字だけを置換するにはどうすればよいですか?
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] Bash 正規表現 =~ 演算子
-
[解決済み] Luaでstring.gmatch()を使って文字列を分割する
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashを使ってファイルに特定の文字列が含まれているかどうかを確認する方法
-
[解決済み】ある文字列が他の文字列を含むかどうかを確認する
-
[解決済み】2つの部分文字列の間にある文字列を検索する【重複あり
-
[解決済み】ユニコード1文字には何バイトかかりますか?