クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

テキストファイルを読んで探す

このレッスンのあとで: ターミナルで、テキストファイルを読んで検索できる。

45分のレッスンコマンドなし

一万行のログ

あるコンビニチェーンの本部で、システム担当として働いています。店長から電話がありました。「今朝のレジの記録を見てほしい」とのことです。

ログファイルは一万行あります。上から全部読むと、一日かかります。

ターミナルなら、必要な行だけを数秒で取り出せます。

このレッスンのゴール

メモ

ターミナルで、テキストファイルを読んで検索できる。

キーワード

ことばいみれい
テキストファイル文字だけが入ったファイルsales.log
ログ起きたことを順に書いた記録
行ファイルの中の一行分の文字
検索決まった文字を含む行を探すこと
パイプ前のコマンドの結果を次に渡す記号|

学生が入力するセルは、このプレビューでは空白です。

cat と head で中身を見る

cat ファイル名 は、ファイルの中身を全部表示します。短いファイルならこれで十分です。

head -n 3 ファイル名 は、最初の3行だけを表示します。長いファイルの形を知りたいときに便利です。

wc -l ファイル名 は、行の数を数えます。ログの大きさがすぐにわかります。

売上ログを読む

コード: bash
printf '09:01 渋谷店 おにぎり 3個\n09:02 新宿店 コーヒー 1杯\n09:05 渋谷店 弁当 2個\n09:07 池袋店 コーヒー 2杯\n09:10 新宿店 おにぎり 1個\n09:12 渋谷店 コーヒー 1杯\n' > sales.log

# ファイル全体を表示します。
cat sales.log

# 最初の3行だけを表示します。
head -n 3 sales.log

# 行数を数えます。
wc -l sales.log

grep は一致する行を取り出す

grep 渋谷店 sales.log は、「渋谷店」という文字を含む行だけを表示します。

ほかの行は表示されません。ファイルそのものは何も変わりません。

-c を付けると、行を表示する代わりに、一致した行の数を表示します。

店名で探す

コード: bash
printf '09:01 渋谷店 おにぎり 3個\n09:02 新宿店 コーヒー 1杯\n09:05 渋谷店 弁当 2個\n09:07 池袋店 コーヒー 2杯\n09:10 新宿店 おにぎり 1個\n09:12 渋谷店 コーヒー 1杯\n' > sales.log

# 「渋谷店」を含む行だけを表示します。
grep 渋谷店 sales.log

# -c を付けると、一致した行の数だけを表示します。
grep -c 渋谷店 sales.log

# やってみましょう: コーヒーを含む行を表示してください。

よくある誤解

注意

grep は探した言葉だけを表示する、と思われがちです。実際は、その言葉を含む行を丸ごと表示します。だから時刻や数量も一緒に見えます。行の中の位置を知りたいときは、表示された行を読みます。

パイプでコマンドをつなぐ

| はパイプです。左のコマンドの結果を、右のコマンドに渡します。

grep 新宿店 sales.log | wc -l は、新宿店の行を取り出してから、その行数を数えます。

小さなコマンドを順につなぐと、大きな作業ができます。

例: パイプで何が起きるか

コマンド一つ目の結果最後の結果
grep 新宿店 sales.log | wc -l新宿店の行が2行2
grep コーヒー sales.log | wc -lコーヒーの行が3行3
grep 渋谷店 sales.log | grep コーヒー渋谷店の行が3行09:12 渋谷店 コーヒー 1杯
head -n 2 sales.log | grep 渋谷店最初の2行09:01 渋谷店 おにぎり 3個

学生が入力するセルは、このプレビューでは空白です。

パイプで数える

コード: bash
printf '09:01 渋谷店 おにぎり 3個\n09:02 新宿店 コーヒー 1杯\n09:05 渋谷店 弁当 2個\n09:07 池袋店 コーヒー 2杯\n09:10 新宿店 おにぎり 1個\n09:12 渋谷店 コーヒー 1杯\n' > sales.log

# grep の結果を wc に渡して、行数を数えます。
grep 新宿店 sales.log | wc -l

# grep を二回つなぐと、両方を含む行が残ります。
grep 渋谷店 sales.log | grep コーヒー

# やってみましょう: おにぎりの行が何行あるか、
# パイプと wc -l で数えてください。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。