第2回 役立つコマンドとシェルスクリプト (1/2)


1.便利なコマンド

ここでは、Unixの便利なコマンドをいくつか紹介します。
a) grep

grepはファイルの中で、指定した文字列を含む行を検索するコマンドです。まずgrepの練習に使用するために、以下の内容のテキストファイルをemacsを使って作成しましょう。(作り方が分からない人は前回の分を復習しましょう。)


1 abc
2 def
3 ghi
1 jkl
2 mno
3 pqr
1 stu
2 vwx
3 yz

ここで、各行の最後で必ず改行(enterキーを押す)を入れてください。全部で9行のファイルとなります。ファイルの名前はなんでもよいのですが、このテキストではabc.txtとしました。以下のような状態に出来たら、次に進みましょう。

1+1

さてgrepを使ってみましょう。基本的な文法は「grep '抜き出したい文字列' ファイル名」です。例えばghiという行だけを抜き出したければ以下のようにします。

1+1

確かにghiの行だけ取り出せていますね。同じように、1と書かれた行だけ抜き出したければ以下のようにします。

1+1

出力結果を新たなファイルに書き込みたいときは、前回の授業で少し取り上げたリダイレクトを使えばよいですね。

1+1

grepは数値計算などでもとても便利なコマンドです。例えばいくつかの物理量を計算する場合に、各物理量の前に?や%などの特殊な文字列をあらかじめ出力されるようにしておくと、grepを使って一つの物理量の結果だけ抜き出すことができます。

ところで、Unixの各コマンドには「オプション」というものがあります。ここではgrepを例に挙げて、オプションの使い方を紹介します。 例えば上で実行したコマンドで、以下のように-cを挿入すると、パターンにマッチした行の「数」だけを表示します。この-cの部分がオプションと呼ばれるものです。

1+1

この例だと、1と書いてある行は全部で3行あったので、「3」と表示されたわけです。

もう一つ別のオプションとして、-nというものもあります。これは、「マッチした行の先頭に行番号を表示する」というものです。

1+1=2

このようにオプションを使うと、一つのコマンドでもより細やかで多様な使い方をすることができます。

練習問題
  • grepを使ってabc.txtの中の「2」と書いてある行を抜き出して、abc2.txtというファイルに書き出しましょう(リダイレクトを使う)。
  • -vというオプションは「文字列とマッチしない行を抜き出す」のに使えます。試してみましょう。

b) head, tail

前回ファイルを閲覧するコマンドとして、catとlessを取り上げました。これらはファイル全体を見るのには便利ですが、例えば何行もある大容量のファイルの初めの数行だけ、あるいは最後の数行だけを見たい場合には向いていません。このような最初と最後を少しだけ表示させるには、headとtailというコマンドが便利です。

headは以下のように、-nのオプションを使って最初の数行を表示させることができます。

1+1=2

同様に、tailは最後の数行を表示させられます。

1+1=2

c) sed

sedはテキストファイルに特定の変換を施し、出力するコマンドです。オプションを含めた使い方はなかなか複雑なので、sedの全貌を知りたい人は本やインターネットで調べてください。ここでは以下の4つの代表的な使い方だけを紹介します。
[1]文字列の置換
[2]行の挿入
[3]行の削除
[4]行の上書き

[1] 文字列の置換
特定の文字列(例えばabc.txtのabc)を別の文字列に置換(例えabcをABCに)するには次の文法をつかいます。「sed 's/置換前の文字列/置換後の文字列/g' ***.txt」 例えば、abc.txtの一行目のabcを大文字のABCに変換したい場合は以下のようにします。

1+1

ちなみに、「sed 's/...」を「sed '○,△s/...」と変更すると、○行目から△行目の間のみに置換の操作を施すことができます。これも各自で試してみましょう。

[2]行の挿入
○行目に新しい行を挿入したい、という場合には「sed '○i 挿入する行' ***.txt」という形を使います。

1+1

○iを○aに変更すると、○行目の「後ろ」に行を挿入することもできます。

1+1

「○i」を「○,△i」に変更すると、○行目から△行目の前に、指定した行を挿入することができます。

1+1

また、指定したキーワードを持つ行だけに注目して、その行の前後に新しい行を挿入するには「sed '/キーワード/i(又はa) 挿入したい行' ***.txt」という形を使います。以下ではabc.txtの「1」を含む行の前に新たな行を挿入しています。

1+1

[3]行の削除
○行目〜△行目を削除したい場合は「sed '○, △d' ***.txt」の形を使います。例えばabc.txtの2-3行目を削除したければ、以下のようにします。

1+1

特定のキーワードを含む行(例えばabc.txtの中の「2」を含む行)を削除するには「sed '/キーワード/d' ***.txt」とします。

1+1

[4]行の上書き

○行目を書き換えたい場合は、「sed '○c 置き換え後の行' ***.txt」とします。

1+1

特定のキーワードを持つ行を上書きするには「sed '/キーワード/c 置き換え後の行' ***.txt」とします。

1+1

d) echo

echoというコマンドは、文字列を表示するのに使えます。例えばecho abcdeとすると、abcdeと表示されます。これは次のページでも何度か使いますが、とりあえず以下のように一度使ってみましょう。(以下の''は""でもいいですし、なくても構いません)

1+1


Home Top Back Next