一行プログラム集

一回きりの使い捨てプログラムの必要性を感じるときは多いと思います。そんなときに便利なのがシェルの一行プログラムです。プログラムのデバッグについても心配ありません bash なら Control-p で直前のコマンドを呼び出せます。そうしておいて、Control-b や Control-f などでカーソルを移動してコマンドの編集ができます。また出力は最初は標準出力に出して確認して、その後リダイレクトでファイルを作るようにすることができます。自分で作って自分で使うので煩わしい入力やエラールーチンの処理を作る必要がなく、コアのプログラムだけですみます。再利用したいときは、alias やスクリプトファイルを作れば OK です。

<コンソール関係>

最近実行したコマンドのリストを見る

history | tail -5 または history 5

<ディレクトリーのファイル操作関係>

ハードディスクの一番大きいファイルを見つける方法

ls -l | sort +4n

出典:www.linux.or.jp/JF/JFdocs/Tips-HOWTO/short.html

カレントディレクトリーのファイル数を表示する

ls | wc -l

カレントディレクトリーのファイルのサイズの総計を計算する

ls -l | awk '{t+=$5} END {print t}'

ディレクトリ内のファイル名を小文字に変換する

for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'` ; done

出典:http://www.linux.or.jp/JF/JFdocs/Tips-HOWTO/detaild.html

ディレクトリ内のファイルの拡張子を .htm から .html に変える。

for i in * ; do [ -f $i ] && mv -i $i `echo $i | sed 's/htm$/html/'` ; done

または

for i in *.htm ; do mv -i $i `echo $i | sed 's/htm$/html/'` ; done

ディレクトリー内のファイル名に .txt という拡張子をつける

for i in * ; do mv $i $i.txt ; done

ディレクトリー内のファイル名から .txt という拡張子を削除する

for i in * ; do mv $i `echo $i | sed 's/\.txt$//'` ; done

ディレクトリー内のファイルのうち先頭に m がついているものに .txt という拡張子をつける。

ls | awk '/^m/ { system("mv "$1" "$1".txt") }'

/^m/ の代わりに色々な正規表現を使うことができるので応用範囲の広いやりかたです。

簡易バックアップ

foo というディレクトリーのファイルをバックアップするには次のようにします。

tar -zcvf ~/backup/foo-`date +%Y%m%d`.tgz foo

または

tar -zcvf ~/backup/foo-$(date +%Y%m%d).tgz foo

ディレクトリーのファイルツリーをを丸々別のディレクトリーにコピーする

現在のディレクトリーのファイルツリーを ~/backup というディレクトリーにコピーします。

( tar cf - . ) | ( cd ~/backup && tar xpf - )
または
cp -r * ~/backup/

ディレクトリー内の全てのテキストファイルの先頭部分を表示する

head $(file * | awk '/text/ {print $1}' | sed 's/://') | less

ディレクトリー内のファイルにバイナリーファイルがないときは

head * | less

Emacs で自動的にセーブされたファイルを削除する

rm *~

<テキストファイルの編集関係>

テキストファイルの行数を数える

wc filename

テキストファイルの内容を行番号つきで表示する

less -N filename

テキストファイルの12行目から18行目までを抜き出す。

sed -n 12,18p myfile

テキストファイルの1行目から20行目までを削除する。

sed 1,20d myfile

DOSファイルの CR を削除する

tr -d '\015' < infile > outfile

英文中の単語の出現頻度表を作る

cat foo.txt | tr ' ' "\n" | sort | uniq -c | sort -nr | less

自分の書いたスクリプトの内容を知りたいとき

自分が書いて日常的に使っているスクリプトの内容を知りたくなるときがあります。スクリプト名が foo のときは次のようにします。引用符はバックークォートです。複数のファイルが検索されたときは :n で次のファイルを見ることができます。もとのファイルに戻りたいときは :p です。

less `locate foo`

<フラットファイルデータベース関係>

コンマでフィールドを区切ったフラットファイルデータベースのフィールドを取り出す

awk -F ',' '{print $2,$1}' foo.txt

フィールドの数値の集計をする

awk '{total += $1} END {print total}'

フィールドのデータでソートする

5番目のフィールドでソート:sort +4 myfile
5番目のフィールドの逆順にソート:sort +4r myfile
5番目のフィールドの数値データでソート:sort +4n myfile