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

sedによる抽出方法をご存知の方、是非教えて下さい。
以下の様なTab区切りのtxtがあったとします。

1 1111 aaaa
2 like bbbb
3 3333 cccc
4 lovelike dddd
5 5555 eeee
6 6666 ffff

ここからloveを含む行の上2行と下1行を出力したいです。
つまりoutputとしては、

2 like bbbb
3 3333 cccc
4 lovelike dddd
5 5555 eeee

となることを期待しています。
sedでなくても良いのですが、Linuxコマンドでこのように抽出する方法はありますでしょうか。

お詳しい方がいらっしゃいましたら、是非ご教示頂ければ幸いです。よろしくお願い致します。

質問者からの補足コメント

  • ありがとうございます。
    これはあくまで例で出しので、実際には必ず上に2行、下に1行あります。
    その上でどのようにすればよいか教えて頂けますでしょうか。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/04/21 12:28
  • さらに、loveというのは1行に出現するとすれば1回のみとわかっています。

      補足日時:2016/04/21 12:30
  • そしてさらに一度loveが出現したら、次に出現するのは必ずその3行目以降です。ですので、前後の重複はないと考えていただいて大丈夫です。説明不足で申し訳ありません。

      補足日時:2016/04/21 12:32
  • loveの前に何かついているものも抽出されたら困るのです(泣)

    No.4の回答に寄せられた補足コメントです。 補足日時:2016/04/21 15:09

A 回答 (4件)

grep "love\( \|\$\)"


的な?
    • good
    • 0

へ~, grep に -w なんてオプションがあるんだ....



「loveの後に何かしら付いているものは抽出されたら困る」ということだけど, 「love の前に何かしらついているもの」は抽出していいんでしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

皆様が実用的なアドバイスを下さったので、次の段階に進めそうです。
が、新しく問題が出現したので、再度投稿させていただこうと思います。
お時間許す限りお付き合い願えればと思います。
よろしくお願い致します。

お礼日時:2016/04/21 15:13

仕様として・・・


上に2行または下に1行なかったらどうする?
2つ以上のloveがある場合は最初の(最後の?)ヒットだけでよいの?全部だしたいの?
全部出す場合は合致する範囲が競合する場合はどうするの?
この回答への補足あり
    • good
    • 0

>ここからloveを含む行の上2行と下1行を出力したいです。



sedでの方法は知りませんが…
grepの-Aオプションと-Bオプションで処理できませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
たしかにできました!!

ところが私が見落としていた問題が一つ発生しました。
実際には以下のような仕様でした。
0 0000 kkkk
1 1111 aaaa
2 lovelike bbbb
3 3333 cccc
4 4444 dddd
5 5555 eeee
6 6666 ffff
7 7777 gggg
8 love hhhh
9 9999 iiiii
10 0000 jjjj

そして希望する出力は

6 6666 ffff
7 7777 gggg
8 love hhhh
9 9999 iiiii

つまり"love"だけ抽出して、love~などのloveの後に何かしら付いているものは抽出されたら困るのです。

grep "love" -A 1 -B 2 inputfile で行うと、lovelikeも部分
0 0000 kkkk
1 1111 aaaa
2 lovelike bbbb
3 3333 cccc
も抽出されてしまいました(泣)
このような場合どのようにすればよいでしょうか?

お礼日時:2016/04/21 12:50

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