Unix / Linux

2012/05/21

シェル - リダイレクト

1.sh,ksh,bash の場合

    標準出力は 1
    標準エラー出力は 2

  (1) 標準出力をfile1へ
      proc 1> file1

  (2) エラー出力をfile2へ
      proc 2> file2

  (3) 標準出力をfile1へエラー出力をfile2へ分ける
      proc 1> file1 2> file2

  (4) 標準出力とエラー出力をまとめる
      proc > file 2>&1

2.csh,tcsh の場合

  (1) 標準出力をfile1へ
      proc > file1

  (2) エラー出力をfile2へ
      ( proc > /dev/null ) >& file2

  (3) 標準出力をfile1へエラー出力をfile2へ分ける
      ( proc > file1 ) >& file2

  (4) 標準出力とエラー出力をまとめる
      proc >& file

sedの覚書

(1) tab を space 変換
    's/\t/ /g'
    処理系によっては、\t は直接 tabキー で入力が必要
    space バイト数を変更すると任意の tabstop ができる

(2) 行頭 space 削除
    's/^ *//'

    行末 space 削除
    's/ *$//'

(3) # で始まる行削除
    '/^#/d'

    space,tab があっても削除
    '/^[ \t]*#/d'

(4) 空行削除
    '/^$/d'

    space,tab があっても削除
    '/^[ \t]*$/d'

(5) 文字間の space,tab を 1バイトspace 変換
    's/[ \t][ \t]*/ /g'

(6) 全角スペースを半角スペース変換
    's/ /  /g'
       ↑ 全角スペース
    任意ではあるが、変換する半角スペースは1バイトとしてもよい

(7) パターンを含む行だけ出力
    '/ptn/!d'

    パターンを含む行だけ削除
    '/ptn/d'

(8) パターンの前後に記号を付ける
    's/ptn/-&-/g'

    & はマッチした文字列

(9) 行頭に記号挿入
    's/^/#/'

    行末に記号挿入
    's/$/#/'

(10) 行を記号(括弧)で括る
    's/.*/<&>/'

(11) データの入替え
    's/\(ptn1\) \(ptn2\)/\2 \1/g'

    実施前:abc ptn1 ptn2 def
    実施後:abc ptn2 ptn1 def

awkの覚書

#--------------------------------------------------
awk.txt  の内容
hokkai taro   165cm 55kg
hokkai hanako 160cm 48kg
tokyo  itiro  170cm 65kg
#--------------------------------------------------

(1) レコード番号の付加
    awk '{print NR, $0}' awk.txt
1 hokkai taro   165cm 55kg
2 hokkai hanako 160cm 48kg
3 tokyo  itiro  170cm 65kg

(2) レコード数のカウント
    awk 'END{print NR}' awk.txt
3

(3) 単語数のカウント(フォーマット出力)
    awk '{tango=tango+NF} END{printf "単語数=%3s\n", tango}' awk.txt
単語数= 12

(4) フィールド指定&条件に合致するレコード出力
    VAL=hanako
    FID=2
    awk '$'$FID'~/'$VAL'/ {print $0}' awk.txt    ## フィールドを変数指定
hokkai hanako 160cm 48kg

    VAL=1.0cm    ## "." は、正規表現(任意の一文字に合致)
    FID=3
hokkai hanako 160cm 48kg
tokyo  itiro  170cm 65kg

Unix / Linux - Tera Termでカラー表示

ANSIエスケープシーケンスでカラー表示するスクリプトを紹介する。

テスト環境は、Windows XPで cygterm にて行っているが、UNIX + TeraTerm でも問題なく表示できることは確認している。
なお、TeraTermの「設定」→「ウィンドウ」→「ウィンドウの設定」でフルカラーまたは16色モードを指定していないと、太字の指定で意図しないカラー表示になる場合があった。

【コード例】

#!/usr/bin/ksh
##--------------------------------------------------
## Tera Termでカラー表示
##
## viエディタでESCコード(^[)を入力する方法
## 1. 編集モード
## 2. Ctrl + V
## 3. ESCキー
##--------------------------------------------------

# ESCコード定義
ESC='^['

#---------------------------------------------------
# 文字のカラー表示
#---------------------------------------------------
echo ""
echo "----- 文字のカラー表示 -----"
echo "----------------------------"
echo "$ESC[30mテキスト黒$ESC[0m"
echo "$ESC[31mテキスト赤$ESC[0m"
echo "$ESC[32mテキスト緑$ESC[0m"
echo "$ESC[33mテキスト黄$ESC[0m"
echo "$ESC[34mテキスト青$ESC[0m"
echo "$ESC[35mテキスト紫$ESC[0m"
echo "$ESC[36mテキスト水$ESC[0m"
echo "$ESC[37mテキスト白$ESC[0m"

#---------------------------------------------------
# 背景と文字のカラー表示
#---------------------------------------------------
echo ""
echo "----- 背景と文字のカラー表示 -----"
echo "----------------------------------"
echo "$ESC[37;40m背景黒:テキスト白$ESC[0m"
echo "$ESC[30;41m背景赤:テキスト黒$ESC[0m"
echo "$ESC[30;42m背景緑:テキスト黒$ESC[0m"
echo "$ESC[30;43m背景黄:テキスト黒$ESC[0m"
echo "$ESC[37;44m背景青:テキスト白$ESC[0m"
echo "$ESC[30;45m背景紫:テキスト黒$ESC[0m"
echo "$ESC[30;46m背景水:テキスト黒$ESC[0m"
echo "$ESC[30;47m背景白:テキスト黒$ESC[0m"

#---------------------------------------------------
# 背景と文字のカラー表示 その他
#---------------------------------------------------
echo ""
echo "----- 背景と文字のカラー表示 その他 -----"
echo "------------------------------------------"
echo "$ESC[1;30;47m背景白:テキスト黒(太字)$ESC[0m"
echo "$ESC[1;33mテキスト黄(太字)$ESC[0m"

ポイントは、viエディタで「ESCコード」の入力である。
入力方法については、コード例の最初に記述しているので参考にしてほしい。

その他のカテゴリー