テキスト処理のコマンド
wcコマンド
wc -lは使いやすいコマンド(lは行数を表すオプション)
入力ファイルの行数、単語数、バイト数をカウントする
オプションなしだと、行数、単語数、バイト数を表示する
code:wcコマンド
23 36 1086 /etc/passwd
23 /etc/passwd # 行数
36 /etc/passwd # 単語数
1086 /etc/passwd # バイト数
sortコマンド=行を並べ替える
デフォルトはアルファベット順の昇順になっている
降順にしたい場合は-rオプション
行の中のある項目に対してsortをしたい場合は、-kオプションを使う
ps x | sort -k 5 =5番目のフィールドに対してsortする
code:sort
4045 pts/0 Ss 0:00 -bash
PID TTY STAT TIME COMMAND
4078 pts/0 R+ 0:00 ps x
4079 pts/0 S+ 0:00 sort -k 5
4044 ? S 0:00 sshd: vagrant@pts/0
PID TTY STAT TIME COMMAND
4044 ? S 0:00 sshd: vagrant@pts/0
4045 pts/0 Ss 0:00 -bash
4081 pts/0 R+ 0:00 ps x
uniqコマンド=重複行を取り除く
ただし隣り合った行だけに対応するので、sortと一緒に上手く使うこと
重複行をカウントするには-cオプションを使う
code:uniq
$ cat newMail.txt
test@example.com
test2@example.com
st3@example.com
test2@example.com
test@example.com
test2@example.com
test@example.com
test@example.com
test@example.com
test@example.com
test2@example.com
# そのままuniqすると、連続していない重複は排除されない
$ uniq newMail.txt
test@example.com
test2@example.com
st3@example.com
test2@example.com
test@example.com
test2@example.com
test@example.com
test2@example.com
# sortしてuniqすると完全に重複が排除された
st3@example.com
test2@example.com
test@example.com
# -cで重複のカウントができる
1 st3@example.com
5 test2@example.com
6 test@example.com
cutコマンド=入力の一部を取り出す
cut -d 区切り文字 -f フィールド番号 ファイル名
cut -d : -f 7 /etc/passwd
フィールド番号は複数つなげることも可能
trコマンド=文字を変換・削除する
tr 置換前の文字列 置換後の文字列
cat /etc/passwd | tr : ,
/etc/passwdをcatして標準出力→標準入力でtrが結果を受け取り、コロンをカンマに変更する
複数文字の置き換えも可能だが、文字列の置換ではない
cat /etc/passwd | tr abc ABC
この場合、a=>A, b=>B, c=>C と置き換える処理なので間違えないこと
引数で渡す文字は、範囲指定もできる tr a-z A-Z で、小文字を全て大文字に置換、となる
trで文字の削除もできる
tr -d 削除文字
cat /etc/passwd | tr -d "\n" =改行コードを取り除いて1行にする
trは1文字単位の置換なので、文字列の置換には別のコマンドを使うこと
sedコマンド、awkコマンド
trは純粋なフィルタコマンドなので直接ファイル名を指定してもダメ
標準入力で値を受け取る必要があるので、catしてパイプで渡す、もしくは入力リダイレクトを使う
cat /etc/passwd | tr : , と、 tr : , < /etc/passwd は同じ結果になる
ログ調査で使いそう
tailコマンド=末尾を表示 ・・・head=先頭を表示の反対
-nオプションで表示する行数を指定できる(デフォルトは10)
tail -f ファイル名 =ファイルの変更を監視する
diff =差分を表示
diff オプション 比較元ファイル 比較先ファイル
< は削除、> は追加を表す(標準入力と出力を思い出す)
変更箇所の表示は少し見づらいが、変更箇所の表示が変更箇所の単位(=ハンク)になる
例の場合だと、11c11 は一つ目のファイルの11行目が二つ目のファイルの11行目に変更された、の意味
a=add, c=change, d=delete
code:diff
11c11,28
< # User specific aliases and functions # 一つ目のファイルで削除された
---
# User specific aliases and functione # 二つ目のファイルで追加された
export LESS='--no-init'
set -o ignoreeof # ignore ctr+D(=exit the terminal)
HISTSIZE=1000000
HISTFILESIZE=1000000
alias la='ls -a'
alias ll='ls -l'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'
diffで出した差分はpatchコマンドでパッチを当てることができる