テキスト処理コマンド
완료 조건
テキスト処理用コマンド
head, tail, cut, wc
- head : ファイルや標準入力の先頭の方の行を表示.
- tail : ファイルや標準入力の最後の方の行を表示.
- cut : ファイルや標準入力中の特定の項目を表示
- wc : ファイルや標準入力中の単語の数,行数を数える.
例
$ head -20 /etc/passwd /etc/passwd の先頭20行を表示
$ tail -10 /etc/passwd /etc/passwd の終わり10行を表示
# tail -f /var/log/message /var/log/message の更新をリアルタイムに表示
$ cut -d: -f1 /etc/passwd /etc/passwd の最初の項目(ユーザ名)だけ表示
$ wc -l /etc/passwd /etc/passwd の行数を表示
sed, awk, grep
- sed : ファイルや標準入力の行ごとの編集.
- awk : ファイルや標準入力中の特定の項目を表示.cut より高機能.
awk -F" " '{print $2}' 空白を区切りにして,2番目の項目を出力.
- grep : ファイルや標準入力から文字を検索.
例 $ sed s/root/ROOT/g /etc/passwd /etc/passwd 中のすべてのrootをROOTに換える $ sed /root/d /etc/passwd /etc/passwd 中の rootを含む行を削除 $ ps ax | awk -F" " '{print $1}' プロセス番号のみ表示 $ grep root /etc/passwd /etc/passwd の root を含む行を表示 $ grep -v root /etc/passwd /etc/passwd の root を含まない行を表示
正規表現
ワイルドカード(*,?) と混同しないように.
- * : 直前の文字の0回以上の繰り返し.
- . : 任意の一文字.
- ^ : 行頭.
- $ : 行末.
- [ ] : [ ] で囲まれたいずれかの文字.
- \ : 機能のエスケープ.特殊文字の機能を無くす.
ワイルドカードはシェルが処理してコマンドに渡す.
正規表現はコマンドが直接処理する. 正規表現の使えるコマンド: grep, sed など
演習
- 各コマンドの練習(参考書を持っている人は参考書を参照). rfc1392 の一部(ダウンロードして使用)
各コマンドの結果を予測しながら,実行してみる. プロンプトが # の場合は root で実行.
$ head -5 /etc/services $ tail -10 /etc/services $ wc -l /etc/passwd $ sed s/hacker/HACKER/g rfc1392 $ sed /cracker/d rfc1392 $ sed s/^/#/ rfc1392 $ cat -n rfc1392 | head -12 | sed '1,7d' $ grep hacker rfc1392 | wc -l $ ps -ax | grep bash |awk -F" " '{print $1}' $ awk -F":" '{print $1}' /etc/group # grep -v ^# /etc/X11/xorg.conf # grep -c ^# /etc/inetd.conf # grep ^# /etc/inetd.conf | wc -l # tail -f /var/log/message # cut -d: -f2 /etc/shadow
- 名前が d で終わるプロセスを表示する(重複不可) (ps, awk, grep, sort, uniqを使う)
- 全てのコマンドで正規表現が使用できるわけではない.次のうち正規表現として正常に作動するコマンドはどれか?
$ ls -ld ^[Aa].* $ ls -ld [Aa]* $ ls | grep ^[Aa].*
마지막 수정됨: 금요일, 18 4월 2014, 4:39 PM