Q1grep error log.txtを実行すると何が表示されますか?
テキスト検索 — grep
ファイルから文字列を含む行を探す基本と、大文字小文字を無視する -i、行番号の -n、再帰検索の -rの使い分けを、ブラウザ端末で操作しながら学べます。
文字列を探す — grep
grepはファイルの中から指定した文字列を含む行だけを抜き出して表示するコマンドです。
grep 探す文字列 ファイル名の形で使い、一致する行があれば、その行がそのまま画面に出ます。
大量のログから必要な行だけを見つけるときに使います。
grepは指定文字列を含む行だけを抜き出し、他の行は出力しません。echo 'error: disk full' > log.txt # 1 行目を作成
echo 'info: started' >> log.txt # 追記
echo 'error: timeout' >> log.txt # 追記
grep error log.txt # error を含む 2 行
grep info log.txt # info を含む 1 行
Linux console
0 / 4 実行済み
Loading Linux Terminal...
大文字小文字を無視する — -i / 行番号 — -n
grepは大文字と小文字を区別します。
-iを付けると区別せずに探せるため、Errorとerrorの両方を拾えます。
-nを付けると、一致した行の前に何行目かの行番号が表示され、ファイル内の位置が分かります。
-iと-nはgrep -in error app.txtのように 1 つにまとめて同時に付けられます。
| オプション | 意味 | 例 |
|---|---|---|
-i | 大文字小文字を区別しない | grep -i error log.txt |
-n | 一致行の前に行番号を付ける | grep -n error log.txt |
-v | 一致しない行を表示する | grep -v info log.txt |
-r | ディレクトリ以下を再帰検索 | grep -r TODO src |
echo 'Error in disk' > app.txt # 1 行目を作成
echo 'error in app' >> app.txt # 追記
echo 'ok' >> app.txt # 追記
grep -i error app.txt # Error と error の 2 行
grep -n error app.txt # 2:error in app(行番号付き)
Linux console
0 / 5 実行済み
Loading Linux Terminal...
一致しない行を除く — -v
-vを付けると、grepは指定した文字列を含む行以外を表示します。
通常のgrepが一致した行を残すのに対し、-vは一致した行を取り除いて残りを出します。
ログから不要な行(infoやdebugなど)を除いて読みたいときに使います。
-vは指定文字列を含む行を除き、残りの行だけを表示します。echo 'error: disk full' > log.txt # 1 行目を作成
echo 'info: started' >> log.txt # 追記
echo 'error: timeout' >> log.txt # 追記
grep -v info log.txt # info を含まない 2 行
Linux console
0 / 4 実行済み
Loading Linux Terminal...
ディレクトリを再帰的に探す — -r
1 つのファイルだけでなく、ディレクトリ以下のすべてのファイルから探したいときは-rを付け、ファイル名の代わりにディレクトリを渡します。
サブディレクトリの中まで再帰的にたどり、一致した行を「ファイル名:行」の形で表示します。
grep -rは渡したsrcから始め、サブディレクトリsrc/subの中まで降りて全ファイルを探します。mkdir -p src/sub # 素材ディレクトリを作成
echo 'TODO: fix later' > src/a.txt # 親に 1 ファイル
echo 'TODO: review' > src/sub/b.txt # サブに 1 ファイル
grep -r TODO src # src 以下を再帰検索
Linux console
0 / 4 実行済み
Loading Linux Terminal...
QUIZ
理解度チェック
まずは1問ずつ答えてみましょう。
Q2grepで大文字小文字を区別せずに探したいときに付けるオプションはどれですか?
Q3-rを付けてディレクトリを渡すとgrepはどう動きますか?