トップ «前の日記(2012-02-19) 最新 次の日記(2012-02-24)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2012-02-22

_ シェルプログラミングのメモ

相当遅い回線(っていってもインターネットだけど)越しにsshでごにょる必要があって、今更ながらにreadlineのありがたさを知ったり、viのありがたみを知ったり(スペース8個叩くより8スペースとかやればキーストローク6個浮くわけだけど、それが×0.5秒で3秒違ったりするわけだから)。

で、20年くらい前に教わった

for i in `改行してずらずら系コマンド`
 do
  echo $i #最初はechoを使って``が正しく設定されているか確認。
done

に死ぬほど世話になった。(相手にrubyが載ってなかったので、何をやるにも、for + (ls | find) + sed とかになってしまったからだ)(xargsとかzshとか気の利いたやつはまだ覚えてなかったってのもあるけど)

一度、forを打っておくと、ヒストリからはfor i in `..';do;echo $i;doneと1行になって出てくるのでここでごにょる。

で、Emacsだと、^u数字-コマンド と打てるのだが、bashのemacsモードだと^uを打った瞬間にバッファが削除されてしまう。何か別の置数方式があるのかも知れないが残念なことに知らない。

で、set -o viで、viモードに入る。すると、ヒストリを出すには、Escしてから、kなので、ここはかったるいが、目当ての行が出てくると、後は数字+コマンド(と言ってもスペースやbなのだけど)が使える。これはありがたい。

findはexecを使えばいろいろ便利だが、エスケープがややこし過ぎるので、結局、forのほうが楽。というわけで、以下のが黄金パターンだった。

for f in `find . -name '*.htmlとか' -print|grep ディレクトリパターン`
 do
   cp $f $f.bak #2回目以降は削除する。
   sed s/パターン/置換後/g $f.bak >$f
 done

うまく行ったら

for f in `find . ...(ヒストリから持ってくる);do rm $f.bak;done

でバックアップを消す。

sedのsは、Rubyの%rと同じく(というよりも、rubyというかperlが真似したのだろうけど)、/以外の文字でも可。urlの置き換えだと/が使われまくるので、s%http://xxx/a/b/c%https://xxx/b/c%g とか。

あと、やってみたら、\nで改行が使えてこれが密かに便利だった。s%</body%<script>...</script>\n</body%とか。さすがに、タグを置き換えるのはリダイレクションと取り違えられると目が当てられなさすぎなので、ファイルへ書いておいて、sed -f ファイル $f.bak > $f とか。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|

ジェズイットを見習え