テキストの範囲表示をしたい場合はcat, head, tail の組み合わせを使う必要があります(正確には後ろの2つでいけますけど)。そういう時とかにパッとコマンド1つで表示してやりたいなって思いました。まあ簡単なんですけど。
CSAフォーマットの文書がなかなか頭に入りません。しょうがないので、テキスト部分をローカルに保存して
grep -n "^[1-9]\." filename
とかやって章立てを眺めたりします。で、この章の内容どうなってたっけ?って時には"grep -n"して表示された行数を使って元のテキストを範囲表示します。そういう時にコマンドが2ステップ3ステップとか書かなきゃいけないのが気分的にイヤだったのでコマンド1個で完結できるようにしたいな、という所です。
まぁ、そこそこCUI(というかシェル)に慣れてるLinuxユーザなら既に調べるまでもなく、って知識でしょうけどね。以下手順。
#!/usr/bin/env bash # -*- coding: utf-8 -*- if test ${#1} -eq 0;then echo "usage: ./ncat filename startline endline" exit 2 fi S=$2 E=$3 cat -n $1 | head -n $E | tail -n `expr $E - $S + 1`とくにエラーチェックはしません。ポイントになるのはバック クォートとexprとかでしょうか。
alias ncat="移動後のスクリプトのパス"の1行を追加します。エディタを閉じて、作業中のコマンドライン上で
source ~/.bash_profileとすればncatが使えるはずです。
バッククオートで囲まれた文字列はコマンドとして解釈され、自分自身がその実行結果として返ってきた文字列によって置き換えられ(=展開され)ます。C言語で#defineしたシンボルをコード中に書く感じと似てるかもしれません。
シェルで足し算などを行う場合、そのまま加減乗除とかの式を書くことはできず、exprをかます必要があります。今回の例ではexprコマンドを使って行数の引き算を行っています。また、用があるのはコマンドの実行結果だけなので、バッククオートで囲んでいます。