Linux覚書 - 5
フィルタによるテキスト処理
- 1 => コマンドラインの操作
- 2 => ファイルやディレクトリの操作
- 3 => Vimの操作
- 4 => 標準入出力とパイプライン
- 5 => フィルタによるテキスト処理現在地
フィルタとは、標準入力を入力として受け取り、(加工した上で)標準出力に出力するコマンドの総称である。
上記の例は、『ファイルAの12行目(def)が、ファイルBの15行目の内容(qvw)に変更(change)された』ということを表している。
パイプラインと組み合わせて使われることが多いため、引数を省略して記載することにする。
カウント
wc
で行数・単語数・バイト数を表示wc -l
で行数を表示wc -w
で単語数を表示wc -c
でバイト数を表示
ソート
sort
で行をASCIIコード順に並び替えsort -n
で数値順に並び替えsort -r
で逆順に並び替えsort -k 列番号s
でs列目の値によって並び替えsort -u
で重複行を1行とみなして表示
重複行の除去
uniq
で連続した重複行を除去uniq -c
で重複行数をカウント
一部切り出し
cut -d 区切り文字 -f 列番号(複数可※カンマ区切り)
で各行の一部(特定の列のみ)を切り出して表示
文字の置換・削除
tr 置換前の文字 置換後の文字
で文字を置換して表示tr -d 文字
で文字を削除して表示
例えば、アルファベットを全て大文字にしたいときは、次のように指定する。
cat ファイル | tr a-z A-Z
tr
コマンドは他のフィルタコマンドとは異なり、コマンド単体ではファイルを読み取る能力を持たないため、上記のようなパイプラインか、入力リダイレクトを使う必要がある。
aをAに、bをBに、cをCに置換したいときは、次のように指定する。
cat ファイル | tr abc ABC
tr
コマンドの引数では、連続した文字は文字列ではなく文字範囲としてみなされる。
末尾部分の表示と追記の監視
tail
でファイルの末尾10行を表示tail -n 数値s
で末尾s行を表示tail -f
で追記監視モードをスタート
差分
diff ファイルA ファイルB
12c15
< def
---
> qvw
<
$\cdots$1つ目のファイルにだけある行>
$\cdots$2つ目のファイルにだけある行
12a15
なら、ファイルAの12行目の後に、ファイルBの15行目の内容が追加された12c15
なら、ファイルAの12行目が、ファイルBの15行目の内容に変更された12d15
なら、ファイルAの12行目の箇所がファイルBでは削除されている
まったく同じ差分をユニファイド出力形式(
-u
オプション付き)で得ると、次のようになる。
diff -u ファイルA ファイルB
@@ -12,1 +15,1 @@
abc
-def
+qvw
xyz
の部分は、『ファイルAの12行目から1行、ファイルBの15行目から1行』が変更されたことを表す。
ユニファイド出力形式では、変更部分の前後数行も表示される。
-
は削除された行+
は追加された行
参考文献
新しいLinuxの教科書