日別アーカイブ: 2012年12月28日

101-3 vi editor

■ vi エディタ
 コマンドモードと入力モードを切り替えながら使う

 □入力モード

  • i …カーソルの前にテキストを入力する
  • a …カーソルの後にテキストを入力する
  • I …行頭の最初の文字にカーソルを移動し、その直前にテキストを入力する
  • A …行末にカーソルを移動し、その直後にテキストを入力する
  • o …カレント行の下に空白行を挿入し、その行でテキストを入力する
  • O …カレント行の上に空白行を挿入し、その行でテキストを入力する
  • esc …コマンドモードに移行
  • Ctrl + [ …コマンドモードに移行

 □カーソル操作

  • h …
  • l
  • j
  • k
  • 0
  • $
  • H
  • L
  • gg
  • G
  • nG
  • :n

 □保存・シェルコマンド

  • :q
  • :q!
  • :wq
  • ZZ
  • :w
  • :e!
  • :r
  • :!
  • :r!

 □編集コマンド

  • x
  • X
  • dd
  • dw
  • yy
  • p
  • P
  • r
  • :%d すべての行を消す

 □検索コマンド

  • /
  • ?
  • n
  • N
  • :noh
  • :%s/A/B/
  • :%s/A/B/g

 □設定変更 ※1

  • :set nu
  • :set nonu
  • :set ts=タブ幅

 ※1 :set で設定した情報は一時的なもの。常時設定は .exrc ファイルに書き込む(: はのぞく)

101-3 grep, sed command

■ grep コマンド

  • -c …パターンがマッチした行の行数だけを表示する
  • -f …検索パターンをファイルから読み込む
  • -i …大文字小文字を区別せず検索する
  • -n …検索結果と合わせて行番号も表示する
  • -v …パターンがマッチしない行を表示する
  • -E …拡張性機表現※1を使用する

 
※1 egrep …expanded regular expression
  + …直前の文字の一回以上の繰り返し
  ? …直前の文字の0回もしくは1回の繰り返し
  | …左右いずれかの記述にマッチする

□問題

  1. $ grep -v ‘^#’ file
  2. $ grep -f regexp file
  3. $ egrep -‘¥s(22|53)/tcp’ file …¥s = スペースを表す正規表現
  4. $ fgrep ‘.*’ file …fgrep = Fixed grep
  5. $ grep ‘¥.¥*’ file

■ sed コマンド
 StreamEditor
 テキストストリームに大して編集を行う
 □オプション

  • -f ファイル …コマンドが書かれたスクリプトファイルを指定する
  • -e スクリプト …指定したスクリプトで変換処理を行う

 □コマンド

  • d …マッチした行を削除する
  • s …パターンに基づいて置換する
  • y …文字を変換する

 □問題

  1. $ sed ‘1,5d’ file1 > file2
  2. $ sed s/linux/LINUX/ file1 > file2
  3. $ sed ‘1,5s/^/>/g’ file1 > file2
  4. $ sed y/ABC/123/ file1 > file2

101-3 regular expression

■ 正規表現
 ※シェルのメタキャラクタとは意味が異なる場合がある

  • .  …任意の一文字
  • *  …直前の文字の0回以上の繰り返し
  • [ ] …[ ]内の文字いずれか一文字(- 範囲を指定 ^先頭にあるときは「以外」)
  • ^  …行頭
  • $  …行末
  • ¥  …次にくる文字を通常の文字として処理する

□問題

  1. c[au]t
  2. ^$
  3. ab*z
  4. a¥*
  5. a[5-7]b

101-3 wc, xargs command

■ wc コマンド
 ファイルの行数、単語数、文字数を表示する

  • -c …文字数(バイト数)を表示する
  • -l …行数を表示する
  • -w …単語数を表示する

■ xargs コマンド
 標準入力の文字列を引数として、与えられたコマンドを実行する
 $ find *.txt | xargs ls -l

101-3 expand, unexpand command

■ expand コマンド
 タブをスペースに変換する

  • -i  …行頭のタブのみ変換する
  • -t タブ幅 …タブ幅を設定する(デフォルトは8桁)

■ unexpand コマンド
 連続したスペースをタブに変換する

  • -a  …行頭以外の空白も変換する
  • -t タブ幅 …タブ幅を設定する

101-3 pr, fmt command

■ pr コマンド
 ファイルの書式をそろえる(印刷前の整形に利用される)
 「-」をファイル名に利用すると、標準入力を読み込む
 $ pr [-opt] [+開始ページ:終了ページ] ファイル名

  • -h ヘッダ文字列 …ヘッダに表示されるファイル名を指定した文字に変更
  • -l ページ長 …ヘッダとフッタを含めたページの長さを行数で指定(デフォルト66行)

 
■ fmt コマンド
 テキストを決められた桁に整形する
 $ fmt -w5 file

  • -w 文字数 …一行の幅を設定する

 

101-3 sort, uniq command

■ sort コマンド
 行単位でファイルの内容をソートする
 $ sort [-opt] [+start-end] file

  • -b …行頭の空白は無視する
  • -f …大文字小文字の区別を無視する
  • -r …降順にソートする
  • -n …数字を文字ではなく数値として処理する

■ uniq
 重複している行を一つにまとめて表示する
 入力元はソートしてある必要がある
 $ sort file | uniq

  • -u 重複している行は一つにまとめて表示する
  • -d 重複している行のみ表示

101-3 tr, split command

■ tr コマンド
標準入力から読み込まれた文字列を変換したり削除したりする
※ファイルをそのまま引数にとることはできない
$ tr -d : < file1
$ cat file1 | tr [:lower:] [:upper:]

  • -d …指定文字列を削除する
  • -s …連続するパターン文字列を一文字として処理する
  • [:alpha:]
  • [:lower:]
  • [:upper:]
  • [:digit:]
  • [:alnum:]
  • [:space:]

■ split コマンド
指定されたサイズでファイルを分割する
オプションで分割行数を指定可能(デフォルト1000行)
$ split -100 srcfile destfilename

101-3 cut, join, paste command

■cut コマンド
ファイルの各行から指定したフィールドを取り出す
処理した結果は標準出力へ
例)
$ cut -c 2 file
$ cut -c 1-7 file
$ cut -d, -f 2 file

  • -c 文字数 …取り出す文字位置を指定する
  • -d 区切り文字 …フィールドの区切り文字(デリミタ)を指定。デフォルトはsp,tab
  • -f フィールド …取り出すフィールドを指定する

■join コマンド
二つのファイルを読み込んで、共通のフィールドを持つ行を連結する
$ join -j2 file1 file2

  • -j フィールド番号 …連結するフィールドを指定する

■paste コマンド
一つ以上のファイルを読み込んで一致する行を水平方向に連結する
$ paste -d”-” file1 file2

  • -d 区切り文字 …フィールドの区切り文字(デリミタ)を指定。デフォルトはsp,tab