LPIC101 part2


## 2章 正規表現とviエディタ
###part 1 http://qiita.com/kindai_dai/items/c94e78d808f5289471dc

* **正規表現**<br>
  file: grep, egrep, fgrep<br>
  another: メタキャラクタ（\ . ^ $ * ? + []）
* **viエディタ**<br>
  command: vi<br>
  another: 
  移動(h, j, k, l, [Ctrl]+[b])
  保存、終了(ZZ, :wq!, :q!, :e!)
  入力(i, a, o, I, A, O)
  削除(x, dd)
  コピー、貼付(yy, p)
  検索(/, ?)

## 正規表現  
### grep

テキストデータの検索を行う

|option  |explane|
|:-------|:------|
|-v|パターンに一致しない行を検索する|
|-n|行番号を表示する|
|-l|パターンと一致するファイル名を表示|
|-i|大文字と小文字を区別しないで検索を行う|

```
[vagrant@localhost ~]$ grep -n linux02 file1.txt
2:linux02
[vagrant@localhost ~]$ grep -n '^a.*$' file1.txt
3:android03
4:android10
6:android30
```

### 正規表現
記号や文字を組み合わせて、目的のキーワードを見つけるためのパターンを作り、検出する手段。

|記号|説明|
|:--|:--|
|c|文字cに一致（cはメタキャラクタではないこと）|
|\c|文字cに一致（cはメタキャラクタであること）|
|.|任意の文字に一致|
|^|行の先頭|
|$|行の末尾|
|*|直前の文字が0回以上の繰り返しに一致|
|?|直前の文字が0回or1回以上の繰り返しに一致|
|+|直前の文字が1回以上の繰り返しに一致|
|[]|[]内の文字グループと一致|

###[ ]の主な使用方法

|例|説明|
|[abAB]|a, b, A, Bのいずれかの文字|
|[^abAB]|a, b, A, B以外のいずれかの文字|
|[a-dA-D]|a, b, c, d, A, B, C, Dのいずれかの文字|

`\(バックスラッシュ)は、メタキャラクタとしてではなく単に文字として扱いたい場合に使用する`

```
[vagrant@localhost ~]$ cat file1.txt
linux01
linux02
android03
android10
android99.
linux20
android30
[vagrant@localhost ~]$ grep -n '^a.*.$' file1.txt
3:android03
4:android10
5:android99.
7:android30
[vagrant@localhost ~]$ grep -n '^a.*\.$' file1.txt
5:android99.
[vagrant@localhost ~]$
```

(例)
1. 空白行以外の行を全て表示する

```
$ grep '.' file1.txt
```

2. ピリオドを含む行を全て表示する

```
$ grep '\.' file1.txt
```

3. Linux, linuxのいずれかを含む行を全て表示する

```
$ grep '[Ll]inux' file1.txt
```

4. 先頭の1文字が数値以外の行を全て表示する

```
$ grep '^[^0-9]' file1.txt
```

5. 先頭が#で始まるコメント行以外の行を全て表示する

```
$ grep '^[^#]' file1.txt
```

### vi [file]
ファイル名を指定せずにviエディタを起動した場合は、編集作業後にファイル名を指定し新規にファイルを保存する

Bill Joyが開発したUNIXで標準のテキスト編集用エディタ

|動作モード|説明|
|:-------|:---|
|コマンドモード|キーを入力すると、viコマンドとして処理される。<br>カーソルの移動、文字や行の削除、コピー、貼り付けが行える。|
|入力モード（挿入モード）|キーを入力すると編集中のテキストデータに文字が入力される。|
|ラストラインモード|文書の保存や、viエディタの終了、検索や文字列の置換を行う|

### カーソル移動と画面スクロールのviコマンド

|主なviコマンド|説明|
|:-----------|:---|
|hまたは←|カーソルを左に1文字移動|
|jまたは↓|カーソルを下に1文字移動|
|kまたは↑|カーソルを上に1文字移動|
|lまたは→|カーソルを右に1文字移動|
|0|現在の行の先頭へ移動|
|$|現在の行の末尾へ移動|
|G|最終行へ移動|
|1G|1行目へ移動|
|nG|n行目へ移動|
|[Ctrl]+[b]|ファイルの先頭に向かって1画面ずつスクロール|
|[Ctrl]+[f]|ファイルの末尾に向かって1画面ずつスクロール|

### ファイルの保存、終了に関するviコマンド
||主なviコマンド|説明|
|:--|:-----------|:--|
|保存|:w|ファイル名を変更せずにそのまま保存|
||:w!|ファイル名を変更せずに強制的に保存|
||:w file名|ファイル名を変更して保存（もしくは新規保存）|
|終了|:q|ファイルを保存せずに終了|
||:q!|ファイルの内容の変更があっても保存せずに強制的に終了|
|保存して終了|ZZ or :wq!|保存と終了を同時に行う|
||:wq!|強制的に保存と終了を行う|
||:wq file名|ファイル名を変更して保存（もしくは新規保存）し、終了する|
|その他|:! ls -l 編集しているファイル名|viから抜けずにコマンドを実行する|
||:e!|編集内容を破棄し、ファイルを再読み込みする|

### 入力モード（挿入モード）にするviコマンド
|主なviコマンド|説明|
|:-----------|:--|
|i|カーソルの前に文字に挿入|
|a|カーソルの後に文字を挿入|
|o|カーソル行の下に新しい行を作成し、その先頭から挿入が開始|
|I|カーソル行の先頭に文字を挿入|
|A|カーソル行の末尾に文字を挿入|
|O|カーソル行の上に新しい行を作成し、その先頭から挿入が開始|

### 文字・タンゴ・行の削除を行うviコマンド
|主なviコマンド|説明|
|:-----------|:--|
|x|カーソル上の1文字を削除|
|dw|カーソルから次の単語を1単語削除|
|dd|カーソル行を削除|
|nx|カーソルから右にn文字削除|
|D|カーソルから行の最後まで削除|
|ndd|カーソル行からn行削除|
|dG|カーソル行から最終行まで削除|
|dH|1行目からカーソル行まで削除|

### コピー、貼り付けを行うviコマンド
|主なviコマンド|説明|
|:-----------|:--|
|yy|カーソル行をコピー|
|yw|単語のコピー|
|P|カーソル行の上の行に貼り付け|
|p|カーソル行の下の行に貼り付け|

### 検索時に使用するviコマンド
|主なviコマンド|説明|
|:-----------|:--|
|/文字列|現在のカーソル位置からファイルの末尾に向かって検索|
|?文字列|現在のカーソル位置からファイルの先頭に向かって検索|
|n|次を検索|
|N|前を検索|

### コマンドの繰り返し、取り消しを行うviコマンド
|viコマンド|説明|
|:--------|:--|
|u|最後に実行した編集の取り消し|
|.|最後に実行した編集の繰り返し|

### オプション機能の設定・解除を行うコマンド
|viコマンド|説明|
|:--------|:--|
|:set [オプション]|オプション機能の設定|
|:set no [オプション]|オプション機能の解除|

### オプション機能
|主なオプション|説明|
|:-----------|:--|
|number|行番号を表示する|
|ignorecase|大文字/小文字の区別をしない|
|list|タブや行末文字など、通常表示されていない文字を表示|
|all|全てのオプションを表示する|

vi起動時に常に同じ設定にするには、 **home/.exrc** ファイルを作成し、設定情報を記述する。

```
# ~(ホームディレクトリ)以下に「.exrc」ファイルを作成し、以下のように記述する。
set number
```