アプリ版:「スタンプのみでお礼する」機能のリリースについて

kshで以下の処理を行いたいのですが、bshで使えるオプションが使えないようです。どうすれば??
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ファイル ./test の内容は以下のとおりです。

test1
30
50
12
test2
60
12
01
test3
***
20
***

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか?

test2
60
12
01
のように表示させたい。

(2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、
取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

A 回答 (3件)

追記


> kshで以下の処理を行いたいのですが、bshで使えるオプションが使えないようです

各コマンドでの機能は、各コマンドに依存する問題で、シェルの違いは関係ありません。

AIXではPOSIXという規格に準じたgrepがインストールされています。
LinuxではGNU grepというGNUが独自拡張したgrepがインストールされています。

なので、(それぞれのシェルがインストールされているとして) AIXでbashを動かしても、grep -B は使えないし、 linuxでkshからgrep -Bとすると正常に動作します。

なお、シェルには外部ファイルを使用しない内蔵コマンドというものがあり、これは(Bash独自の内蔵コマンドがkshで使えないなど)シェルの違いに影響を受けます。
    • good
    • 0

-Aとか-BとかはGNU grep独自の拡張なので、AIX等のgrepでは使えません。



もしかしたら別名(ggrep)とか、別ディレトリとかにGNU grepがあるかもしれませんが、環境依存のことなのでなんとも言えません。

解決策の一つはGNU Grepを自前でビルドすることです。
$HOME/binあたりにインストールしましょう。

もう一つは、sed,awk,perl等のスクリプトで同等の処理をすることです。
例えば、awkなら
awk '/test2/ {a=3+1;} a>0 {print ; a--}' < test
で test2とそれに続く3行を表示します。

(2)は↓にある方法が有効なはずです。
http://oshiete1.goo.ne.jp/qa5810772.html
    • good
    • 0

以下、linuxのgrepのオプションですが、使えないのですか?



-C [NUM], -NUM, --context[=NUM]
NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行の前後の行も表示します。

取り出す行がわかっているなら、
http://ambiesoft.ddo.jp/blog/archives/328

この回答への補足

う~ん、使えないみたいですね~・・・

-c オプションはあるみたいですが、意味が違うみたいです。

補足日時:2010/04/15 07:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!