文字処理コマンド入門
教養ゼミ(CVとその周辺)教材
計算機は人間の指示(多くの場合コマンドと呼ばれる)に従って結果
を返すものと考えられる。古くは、コマンドは文字で入れることが普
通で、結果も文字が普通であった。
現在の計算機は、これに加えて人間の指示を文字のほか、与えられた
選択肢の中から選んで(マウスクリック等)示すことができ、結果は
文字だけでなく、図や画像で出すこともできる。これをグラフィック
ユーザインタフェース(GUI)と呼ぶ。現在パソコンではグラフィッ
クユーザインタフェースが全盛である。また、ワークステーションを
はじめとして使われるUNIXでも特にパソコン向けを中心にグラフィッ
クユーザインタフェースがよく使われるようになってきている。しか
し、古くから使われている文字だけのやりとりには独特のよさもある。
ここではそのような観点からUNIXの文字処理コマンドを解説する。
・文字(キャラクタ)ファイルの表示
cat ファイル名 でファイルの中身を管面に表示できる。長い行数
のファイルは管面一杯になれば、次々と消えていってしまうが、
moreコマンドは管面(ページ)のはじのところで待っていてくれる
(継続はスペースキー、終了はq)。(注意:cat、 moreは文字ファ
イルを対象としている。文字ファイルでないファイル(後に出てくる
実行プログラムなどのバイナリファイルを対象にすると管面が乱れる
ので使わないこと)
・文字ファイルのプリント
一般にはlpr ファイル名でプリントできる。使用条件によりこのま
までは使えないことがあるのでその場合指示に従うこと。
・文字列データの編集について
計算機プログラムの作成や修正その他に文字列データの編集が必要
である。このような目的に用いるものをエディタ(テキストエディタ)
という。代表的なものにemacsやviがある(古くはUNIXのシステム管
理にはviが必須と言われた。現在は必ずしもそうでないが、システム
管理を志すなら基本的な使い方位知っておいてよい。viには独特のよ
さもある)。日本語の編集にはemacsから派生したmuleを使うことが
多い。以下の説明でmuleあるいはemacsとあるところは相互にemacs、
muleと読み替えても同じである。
・mule ファイル名で、指定したファイルの編集ができる(指定した
ファイルが既存の場合はそれを、なければ新たに作って編集対象とす
る)。
・muleで編集しているデータは一時的なもので、蓄える操作(セーブ)
を行わないと消えてしまう。セーブはコントロールキーを(適当な指
で)押しながら、(別の指で)xを押し(この操作をC-Xで表す)、
更にC-Sとして行う。
・muleの終了 C-X, C-Cで終了する。
・ポインタ(カーソル)の移動
C-P, C-Nで上下、C-B, C-Fで左右にポインタを動かせる。
・ポインタのある位置で文字をキーインすると、文字位置の直後に文
字が入力される。
また、C-Dによりポインタの指している文字を消去できる。
・行の先頭と最後
C-Aで先頭、C-Eで最後にポインタが移動する。
・1行消去と復活
行の先頭にポインタを置き、C-Kとするとその行は消える。C-Yと
すると復活する。
これだけでは大して意味がないが、ポインタを別の位置に移動して
からC-Yとするとその位置に消した行が復活する。つまり、行が移動
コピーできる。
・文字列消去と復活
1行の文字列よりもっと沢山の複数行にまたがる文字列を考える。
この文字列の先頭にポインタを移動し、M-スペース(メタスペース
と読む。escキーを押してからスペースキーを押すことを表す)後、
文字列の最後のさらに次の文字にポインタを移動してからC-Wとする。
すると文字列は消去される。ポインタを別の位置に移動してからC-Y
とするとその位置に消した文字列が復活する。つまり、文字列が移動
コピーできる。
・muleにはまだまだ沢山の機能があって便利に使えるがプログラムの
編集には当面この程度で足りるだろう。
・grepコマンドについて
grepコマンドは指定した文字列を含む行を抽出するコマンドである。
例えばあるファイルabcが次のような数行からなるものとする。
-rw-r--r-- 1 oshima 3751 Apr 18 19:04 termscript
-rw-r--r-- 1 oshima 8 Apr 29 1998 texput.aux
-rw-r--r-- 1 oshima 1247 Apr 29 1998 texput.log
-rw-r--r-- 1 oshima 692 Apr 24 17:24 typescript
grep tex abcとすると、ファイルabcの中から、texを含む行だけを抽出
してくれ
-rw-r--r-- 1 oshima 8 Apr 29 1998 texput.aux
-rw-r--r-- 1 oshima 1247 Apr 29 1998 texput.log
と表示される。このgrepコマンドはリダイレクションと組み合わせる
ことも(当然)できる。たとえば
who | grep oshima
とすると、oshimaがログインしているかどうかを表示できる。grepコ
マンドを使えるかどうかでUNIXを使う効率が格段に異なることは間
違いない。
・diffコマンドについて
2つのファイルaとbがあったとして、その違いを知りたいことがよく
ある。たとえばあるプログラムのソースを編集しているうちに、それ
までまともに動いていたはずのものがうまく動かなくなったときなど、
まともに動いたときの版が残っていればそれと比較すれば原因究明に
かなり役立つ。このとき1行づつ眼を皿のようにして比べていてはと
ても大変である。このとき役立つのがdiffである。
diff a b
とすると、2つのファイルの変化があった行だけを出力してくれる。
しかも増えた分、減った分いずれも分かるように表示してくれる。シ
ステム管理などにもdiffは威力を発揮する。
・sedコマンドについて
ファイルの中のある文字列を一斉に変えたいことがある。aというファ
イルの中のABCという文字列を一斉にXYZに変えてbというファイル
に入れるには
cat a | sed 's/ABC/XYZ/' > b
とすればよい。sedはstream editorの略で、ここに示した例はほんの一
端にすぎないが、文字処理には威力を発揮する。これと同様の目的で
使われるものにawkやperlがある。これらを学んでUNIXのベテランに
なるとよい。
参考書
カーニハン、パイク著 石田晴久訳:UNIXプログラミング環境、ア
スキー出版局、3800円
質問・連絡は oshima%kaiyodai.ac.jpまで