UNIXフィルタの記事から

ここでは、「UNIXフィルタの記事から」 に関する記事を紹介しています。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
UNIXのフィルタでSQLみたいなことをしてみたくなった.

CodeZineに記事があったのでまとめ:
業務で楽するためのUNIXテクニック集 (保田和隆氏)

第3回のp.2に paste コマンドの説明が.
他にも具体的なコマンドがたくさんあるので,それを改造すればいろいろできそう.


本体を見るためのポインタ作りをしてみた.すなわち見出しをまとめてみた.


第0回 まずはおさらい、シェル制御構造と正規表現の基礎
  • パイプライン:コマンド1 | コマンド2 | ...
  • コマンドリスト:
    • コマンド1 ; コマンド2 ; ...
    • コマンド1 && コマンド2
    • コマンド1 || コマンド2
  • コマンド置換
    • bashでは `` で囲うことも $() で囲うこともできる
  • ブレース展開
    • 「,」カンマで区切った複数の文字列を「{}」ブレース(中括弧)で囲む
  • シェルの変数展開
    • ${パラメータ#パターン}
    • ${パラメータ##パターン}
    • ${パラメータ%パターン}
    • ${パラメータ%%パターン}
  • for文
    • for 変数 in リスト; do コマンド; done
    • for((i=0; i<5; i++)); do echo "$i"; done
    • for((i=1; i<5; i++)){ echo "$i"; }
    • for file in *; { mv -i "$file" "$file.bak"; }
  • while文
    • while 条件;do コマンド;done
    • find ./ -type f | while read file; do wc -l "$file"; done
  • if文
    • if コマンド1;then (終了コード0)コマンド; elif コマンド2; then コマンド;else コマンド;fi
    • for dir in *; { if [ -d "$dir" ] ; then echo "$dir:"; ls "$dir" | wc -l; fi; }
    • for dir in *; { [ -d "$dir" ] && (echo "$dir:"; ls "$dir" | wc -l); }
  • 理解しておくと便利な正規表現(sed、grep、exprはデフォルトでは基本正規表現)
    • ls * | sed 's/?.[^.]*$//'


第1回 find/grep/xargsコマンドを使いこなす 「検索」編
  • テキストファイルを検索する(grepコマンド)
    • 複数の検索文字を指定して検索(OR検索)する
    • 複数の検索文字を指定して検索する(AND検索)
  • 複雑な条件でファイル・ディレクトリを検索する(findコマンド)
    • findコマンドの代表的なオプション(-follow -maxdepth n -mindepth n)
    • findコマンドの代表的な判別式 
      • 基本:(-name [pattern] -path [pattern] -regex [pattern] -type [filetype] -group [group] -user [user])
      • 日時:(-atime (+/-)n -mtime (+/-)n -mmin (+/-)n -newer [file name])
      • サイズ:(-empty -size n[c/k/b])
      • アクセス権:(-perm mode -perm -mode -perm +mode)
    •  findコマンドの代表的な演算子
      • (\( 判別式 \) ! 判別式 判別式1 -a 判別式2「判別式1 -and 判別式2」「判別式1 判別式2」 判別式1 -o 判別式2)
    •  findコマンドの代表的なアクション
      • (-print -fprint ファイル名 -exec コマンド '{}' \; -exec コマンド '{}' + -ok コマンド \;)
  • 検索結果に対するコマンドの実行(find -exec/xargsコマンド)
    • find . -type f -exec コマンド '{}' \;
    • find . -type f -print0 | xargs -0 コマンド
    • find … -exec bash -c 'シェルコマンド文字列' \;
  • findコマンドを利用した便利なUNIXテクニック例
    • core、#*、*~を一括削除する
    • ユーザーが所有するファイルのみを検索して削除する
    • 検索して見つかった全ファイルを移動する
    • 検索して見つかった全ファイルをディレクトリ構造ごとコピーする
    • サイズと拡張子を条件にファイルを検索し、結果を別のファイルに書き込む
    • findコマンドの「許可がありません」を表示しない

第2回 ファイル・ディレクトリ名の一括置換/一括作成
  • 空のファイルを作成する
    • :,echo,cp を用いた方法に加え,mktemp.touchも.
  • ファイル・ディレクトリの一括作成
    • ディレクトリを一度に複数作成する
    • シェルの制御構文を利用してディレクトリを一度に複数作成する
    • ゼロパディングした名前のディレクトリを一度に複数作成する
    • シンボリックリンクのファイルを一括で作成する
  • ファイル名・ディレクトリ名の一括置換
    • 同一階層内のすべてのファイル・ディレクトリ名に拡張子を付ける
    • サブディレクトリに渡るすべてのファイル名から拡張子を取り除く
  • ファイル名置換に関する便利なUNIXテクニック例
    • サブディレクトリに渡るすべてのファイル名だけに拡張子「.bak」を付ける
    • 同一階層内のすべてのディレクトリ・ファイル名から拡張子「.bak」を取り除く
    • 同一階層の複数のファイル名の拡張子「.text」を「.txt」に置き換える
    • サブディレクトリに渡るすべてのファイルの拡張子「.text」を「.txt」に置き換える
    • サブディレクトリに渡るすべてのファイルの拡張子を「.txt」に変更する
    • サブディレクトリに渡る拡張子のないすべてのファイルに「.txt」を付ける
    • 同一階層のすべてのファイル名の先頭に「日付-」を加える
    • サブディレクトリに渡るすべてのファイル名の拡張子の前に「日付-」を加える

第3回「並べ替え」編 cut、head、tail、sort・・・定番のフィルタコマンドを使いこなす!
  • ファイル内文字列の分割(cut)
    • 例)「/etc/passwd」ファイルからユーザー一覧を出力
    • 例)カンマ区切りの2列目以降を切り出す
    • 例)1文字目と3文字目を切り出す
    • 例)スペース区切りの1列目と3列目を切り出す
    • 注:空白区切りの列を切り出すにはawk、sedなど
  • ファイル内文字列の結合(paste)
    • 例)2つのファイルの内容を結合して出力する
    • 例)lsコマンドの結果を3列で表示する
  • ファイル内文字列のソート
    • sort 例)CSV形式のファイルの2列目をソート対象として、昇順で並び替える
    • uniq 例)ファイルの重複行を1行にまとめ、同一行の数を出力
  • ファイル内の一部分を出力
    • head 例)1番最近更新されたファイルを表示する
    • tail 例)システムのログファイルをリアルタイムに表示する
  • ファイル内容の要約
    • wc 例)サブディレクトリを含むすべてのファイル数を数える
  • フィルタコマンドに関する便利なUNIXテクニック例
    • ディレクトリを「:(コロン)」で区切ってリストにする
    • 隠しファイル(.ファイル)を含むディレクトリ・ファイルのサイズを出力する
    • ランダムな文字列を出力する
    • IPアドレスをソートする
    • N行目からM行目を表示する
    • 末尾N行を削除して表示する
    • メモリを多用しているプロセス順に表示する
    • C言語ソースコードのステップ数(行数)をカウントする
    • よく利用するコマンドのリストを表示する
    • アクセスログから、アクセス数の多いIPアドレス順に並べる
    • アクセスログから、アクセスしたIPアドレスのホスト名一覧を取得する
    • 特定のディレクトリにアクセスした IP アドレス一覧を表示する


スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://tekitobibouroku.blog42.fc2.com/tb.php/388-3c88f64b
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。