正規表現
正規表現 | 意味 |
---|---|
. |
任意の 1 文字 |
^ |
行の先頭 |
$ |
行の末尾 |
? |
直前の表現が 0 回もしくは 1 回 |
* |
直前の表現が 0 回以上連続 |
+ |
直前の表現が 1 回以上連続 |
{n} |
直前の表現が n 回連続 |
{n,} |
直前の表現が n 回以上連続 |
{n,m} |
直前の表現が n 回以上 m 回以下連続 |
() |
グループ化(ab)+ → "ab"、"aba"、"ababc" にマッチ |
[] |
文字クラス[abc] → "a"、"b"、"c" いずれかを含む行にマッチ[^abc] → a,b,c のいずれかを含まない行にマッチ(否定)[a-g] → アルファベット順の a ~ g のいずれかを含む行にマッチ |
| |
OR(左右のどちらか)'aaa|bbb' → aaa または bbb を含む行に一致(\ はエスケープ用) |
文字クラス
学習中
正規表現やパターンマッチングで使われる概念。
特定の文字の集合を表し、特定の範囲や種類の文字とマッチさせるために使われる。
文字クラス | 説明 | マッチする例 |
---|---|---|
[abc] |
a または b または c
|
a 、b 、c
|
[0-9] |
0 から 9 の数字 |
3 、7
|
[a-z] |
アルファベット(小文字) |
m 、z
|
[A-Z] |
アルファベット(大文字) |
M 、Z
|
[a-zA-Z] |
アルファベット(大文字・小文字) |
b 、Q
|
[^a-zA-Z] |
アルファベット以外(否定) |
1 、¥ 、$
|
POSIX の文字クラス | 意味 |
---|---|
[:alpha:] |
アルファベット(A-Z, a-z ) |
[:digit:] |
数字(0-9 ) |
[:alnum:] |
英数字(A-Z 、a-z 、0-9 ) |
[:upper:] |
大文字(A-Z ) |
[:lower:] |
小文字(a-z ) |
[:space:] |
空白・タブ・改行 |
[:punct:] |
句読点(, 、. 、! ) |
POSIX の文字クラス [:alpha:]
だけを書くと、単なる文字列とみなされてしまい、正規表現のパターンとして認識されないため、POSIX の文字クラスは「通常の文字クラス」 [...]
の中に埋め込む必要がある。
$ grep '[:alpha:]' file.txt
$ grep '[[:alpha:]]' file.txt
$ grep
global regular expression print
テキストファイルや 標準入力 の中から、特定のパターン(文字列、正規表現 を利用して、検索対象が含まれる 行を検索する。
データの受け取り方には「ファイルからデータを受け取る」方法と「標準入力からデータを受け取る」方法の 2 種類がある。
$ grep パターン ファイル
$ コマンド | grep
オプション
$ grep -i パターン ファイル
$ grep -v パターン ファイル
ディレクトリ内から特定のファイルを検索することもできる。
$ grep パターン ディレクトリ
$ grep -r パターン ディレクトリ
$ tr
translate
標準入力 から受け取った文字列を変換し、標準出力 に出力する。
$ tr 文字セット1 文字セット2
$ tr -d 文字セット
文字セットには 文字クラス を利用することもできる。
$ tail
ファイルの末尾を表示する。
デフォルトでは末尾 10 行文が出力される。
$ tail ファイル
オプション
$ tail -n 行数 ファイル
-f
オプションを使用すると、ログファイルなど、リアルタイムで更新されるファイルの末尾を監視できる。変更があった場合、即座に新しい行を表示する。
$ tail -f ファイル
$ head
$ tail
と逆で、ファイルの先頭行を表示する。
デフォルトでは先頭の 10 行文が出力される。
$ head ファイル
$ head -n 行数 ファイル
$ cut
テキストファイルから、特定のフィールドや文字を抽出する。
CSV ファイルやログファイルなど、区切り文字で整理されたデータを扱う際に便利。
データの受け取り方には「ファイルからデータを受け取る」方法と「標準入力からデータを受け取る」方法の 2 種類がある。
$ cut ファイル
$ コマンド | cut
オプション
$ echo "abcdefg" | cut -c 1-5 # 1文字目から5文字目までを取得
abcde
$ echo "abcdefg" | cut -c 1,3,5 # 1,3,5文字目を取得
$ echo "apple banana orange" | cut -f 2 # 2つ目のフィールドを取得(デフォルトではタブ区切り)
$ echo "apple,banana,orange" | cut -d ',' -f 2 # 2つ目のフィールドを取得(カンマ区切り)
$ split
指定したファイルを複数の小さなファイル(チャンク、塊)に分割する。
$ split ファイル 出力ファイルの接頭辞
出力ファイルの接頭辞(プレフィックス)は、ファイルを分割した際に使用される。デフォルトでは x
が使用される。
$ split ファイル prefix_ # prefix_a, prefix_b などのファイル名で分割される。
接尾辞(サフィックス)はデフォルトでは aa
、ab
などになっているが、数値に変更することができる。
$ $ split -d -l 10 ファイル prefix_ # 10行ごとに分割し、接尾辞が 00, 01, 02... となる
$ split -l 行数 ファイル
$ split -b バイト数 ファイル
$ split -b 1 ファイル # 1 バイトごと
$ split -b 1k ファイル # 1 キロバイトごと
$ split -b 1m ファイル # 1 メガバイトごと
$ split -b 1g ファイル # 1 ギガバイトごと
$ sort
出力先を明示的に指定しない場合、並び替え結果は 標準出力 に吐き出される。
$ sort ファイル
オプション
$ sort -r ファイル
$ sort -n ファイル
$ sort -u ファイル
$ sort ファイル -o 出力先ファイル
$ uniq
unique
隣接する重複行を削除する。
出力先を明示的に指定しない場合、処理結果は 標準出力 に吐き出される。
$ uniq ファイル 出力先ファイル
$ uniq ファイル
連続する重複のみを削除する ため、事前に $ sort
しておくと、全ての重複を除去することができる。
オプション
$ uniq -u ファイル
$ uniq -d ファイル
$ uniq -c ファイル
$ uniq -i ファイル
$ less
$ less ファイル
$ コマンド | less
操作 | 説明 |
---|---|
q |
終了する |
f / Space
|
次のページに進む(forward) |
b |
前のページに戻る(back) |
↓ / j
|
次の行に移動 |
↑ / k
|
前の行に移動 |
G |
ファイルの末尾に移動 |
g |
ファイルの先頭に移動 |
/文字列 |
文字列を前方検索 |
?文字列 |
文字列を後方検索 |
n |
検索で見つかった次の場所に移動 |
N |
検索で見つかった前の場所に移動 |
$ wc
word count
テキストファイルの行数、単語数、文字数、バイト数などをカウントする。
データの受け取り方には「ファイルからデータを受け取る」方法と「標準入力からデータを受け取る」方法の 2 種類がある。
$ wc ファイル
$ コマンド | wc
オプション
$ wc -l ファイル
$ wc -w ファイル
$ wc -c ファイル
$ wc -b ファイル
$ sed
Stream Editor
$ vi
などの対話形式のエディタと異なり、テキストファイルや 標準入力 のデータに対して、一括で置換、挿入、削除、追加などの処理を行うことができる。
ストリームエディタ とも呼ばれる。
使用したデータファイルには変更が加わらない。内部的には、読み込まれたデータは一時的にバッファに格納され、処理結果は 標準出力 に出力されている。
$ sed '編集コマンド' ファイル
オプション
$ sed 's/検索文字列/置換文字列/オプション' ファイル
$ sed 's/foo/bar/' ファイル # 最初に見つかった foo を bar に置換
$ sed 's/foo/bar/' ファイル # 行内のすべての foo を bar に置換
$ sed '3d' ファイル # 3行目を削除
$ sed '2,4d' ファイル # 2行目から4行目を削除
$ sed '/foo/d' ファイル # foo を含む行を削除
$ sed -n '5p' ファイル # 5行目を出力
$ sed -n '2,4p' ファイル # 2行目から4行目を出力
$ sed '3a 追加テキスト' ファイル # 3行目の後に "追加テキスト" を追加
$ sed '3i 挿入テキスト' ファイル # 3行目の後に "挿入テキスト" を挿入
$ find
$ vim
$ vim ファイル名
$ vim
に様々な モード があり、特定のキーを押すことによってこれを切り替え、編集を行うことができる。
モードの切り替えは必ずノーマルモードを介して行う必要がある。
例えば「挿入モード」から直接「検索モード」に切り替えることはできない。
モード、操作 | キー、説明 |
---|---|
ノーマルモード | Esc |
挿入モード |
I (Insert) |
上書きモード |
SHIFT + R
|
検索モード |
/ :カーソルからファイルの末尾に向かって検索? :カーソルからファイルの先頭に向かって検索切り替えた後は、検索文字列を入力して Enter を押す。検索実行後、ノーマルモードに戻り、N キー(Next)を押すと、次のヒット結果まで飛ぶことができる。前のヒット結果まで戻る場合は SHIFT + N キーを同時押しする。 |
選択モード |
V 切り替え後は → ↓ ← ↑ キーで選択範囲を決定する。この状態で Y キーを押すと、選択範囲をクリップボードにコピーすることができる(ヤンク:yank)。貼り付けは SHIFT + P で行う。行をまるごとコピーしたい場合は Y キーを2回押す。 |
アンドゥ |
U (Undo)取り消し |
リドゥ |
Ctrl + R 同時押し(Redo)取り消しの取り消し |
末尾に移動 |
SHIFT + G 同時押し |
終了する |
ノーマルモードに遷移後に入力する(q :Quit、w :Write)保存しない: :q → Enter 保存しない(編集した場合): :q! → Enter 保存する: :wq → Enter ファイル名を指定して保存する: :wq ファイル名 → Enter
|
vim から抜けずにコマンドを実行する |
! コマンド |
削除に関わるコマンド | 説明 |
---|---|
dw |
カーソル以降の単語を削除 |
nx |
カーソルから右の n 文字分を削除 |
dd |
カーソル行を削除 |
ndd |
カーソル行から n 行分を削除 |
D |
カーソルから同じ行の末尾までを削除 |