tips/command

Last-modified: 2009-06-23 (火) 22:49:53

●date
date -d '20070501 7 days ago'
2007年5月1日の7日前の日付を求める


date -d '20070501 7 days ago' '+%Y%m%d%H%M'
フォーマット指定も可


現在時刻の1時間前の日付を求める
date -d '1 hours ago'


2007年5月1日0時0分0秒の1時間前の日付を求める
date -d '2007/05/01 00:00:00 1 hours ago'


●join
join -1 2 -2 1 -o 1.1,1.2,2.1 file01 file02
1番目のファイルの2つ目の項目と2番目のファイルの1つ目の項目を突合せ、
一致する行を以下の順序で出力する。
・1つ目のファイルの1番目の項目
・1つ目のファイルの2番目の項目
・2つ目のファイルの1番目の項目

-aオプション:一致しない行も出力
-vオプション:一致しない行のみ出力



●find
ディレクトリ直下のみを検索したい場合
pathに"dir/*"で「-prune」指定 もしくは pathに"dir"で「-maxdepth 1」を指定する。



du -cb ファイル名
・・・ファイルの合計バイト数


●grepのOR条件

grep -E "HOGE|FOO" bar.txt

パイプの前後にスペースを入れない

スクリプト内だと

FUGA="HOGE|FOO"

grep -E "$FUGA" bar.txt

grepの検索条件変数の前後の「"」を忘れない


●findの条件指定で注意すること

-name条件でワイルドカードを使用する場合は前後に「"」を忘れないこと
パス名の最後に「*」が付加する場合は「"」で囲まないこと



●sed
改行に置換する方法(以下は"RETURN"を改行に置換する)
・ダブルクォートによる
sed -e "s/RETURN/\\ (ここで改行する)
/g" ファイル名
この場合、変数により行数を指定可能


・シングルクォートによる
sed -e 's/RETURN/\ (ここで改行する)
/g' ファイル名


「"」が無難(変数展開のため?)


●seq
kernelのバージョンによってデクリメントの場合の指定方法が異なる場合がある。
30から1までデクリメントしたい場合に
$seq 30 1
という指定だけでOKの場合もあれば、
$seq 30 -1 1
という指定(-1というintervalを指定)が必要な場合もある。


seq -wで0パディングしてくれる


●sudoとsu
sudoは環境変数を変更しない。
環境変数を起動ユーザのもので適用したい場合はsuを使用する。


●bash環境でのprintf
printf "%02d" $HOGE
とか。"()"や","は必要ない。


●expectスクリプトでのパラメータ取得
set 変数1 [lindex $argv 0] <-1番目のパラメータを変数1に設定
set 変数2 [lindex $argv 1] <-2番目のパラメータを変数1に設定
変数はbashスクリプトと同様に「$変数」で指定する


●awk
デリミタは-Fで指定可


●less
tar.gzやrpmも開ける
/usr/bin/lesspipe.shを見ると何をやっているかわかる