一回きりの使い捨てプログラムの必要性を感じるときは多いと思います。そんなときに便利なのがシェルの一行プログラムです。プログラムのデバッグについても心配ありません 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
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
for i in * ; do mv $i $i.txt ; done
for i in * ; do mv $i `echo $i | sed 's/\.txt$//'` ; done
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
rm *~
wc filename
less -N filename
sed -n 12,18p myfile
sed 1,20d myfile
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