著作一覧 |
相当遅い回線(っていってもインターネットだけど)越しに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
とか。
ジェズイットを見習え |