楽しいだけで十分です

好きなことを書きます

grepコマンドで、前後の行を取得する方法

ログを調査するときなどに、grepをよく使う。 ただ、grepで検索した文字列の前後の情報も欲しい時がある。 その場合は今までgrepした後に、別途lessで見直すなどしていた。 もっと便利なやり方あるんだろうなーと思ってたら、先輩エンジニアさんから教えてもらったのでメモ。

使うコマンド

# grepと一致した行と、その後のn行を表示する (after-contextの`A`)
grep -An

# grepと一致した行と、その前のn行を表示する (before-contextの`B`)
grep -Bn

# grepと一致した行と、その前後のn行を表示する (contextの`C`)
grep -Cn

temp.txt (検索対象のファイル)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-Aオプション

$ grep -A5 10 temp.txt
10
11
12
13
14
15

-Bオプション

$ grep -B5 10 temp.txt
5
6
7
8
9
10

-Cオプション

$ grep -C5 10 temp.txt
5
6
7
8
9
10
11
12
13
14
15

参考

qiita.com

初めてのContribution

前のエントリで書いた、プロを目指す人のためのRuby入門(チェリー本)の誤植を修正するPRが無事にマージされた。 他の人のリポジトリにマージされたのが初めてだったので、一人で「やったー!」と喜んでた。

github.com

それと、GitHub.comのContributionsが、今日で3000を超えた。 もともとコミットの粒度を細かめにしてるのもあるけれど、Write Code Every Dayしている結果だなあと思ってる。 これからも積み重ねていこう。

f:id:yinm:20171121203918p:plain

今日のもくもく

今日は、Ruby(on Rails)の勉強をした。
今年の残りは、Ruby関連の勉強を重点的にやることになりそうかなーと思ってる。

Ruby

この本やってる (まだ発売されてないけれど、先行販売してる書店があったので購入)

gihyo.jp

今は2章の途中。
文字列や数値の扱いなど基本的な部分をやってる。
ただ、「なぜRubyでは、nilが偽になるのか」など、実装するときに役立つことも書かれてて面白い。

それと、読んでる途中で誤植かなと思うものを見つけたので、PRを送ってみた。
人のリポジトリにPRを送ったことがなかったので、どうやるんだろうなと思ったけれど、この記事がわかりやすかった。

GitHub のフォーク (fork) とプルリクエスト (pull request) の使い方 - akihiro kamijo

Rails

この本をやってる。

gihyo.jp

とりあえず、1 ~ 3章がRailsの基本ということで、ささっとやった。
今は、Modelの説明をしてくれている5章をやっている。
Active Recordが全然使いこなせない...と思うことが多いので、この章で練習したい。

ブログを書くこと

ひさしぶりにブログを書く。 以前に書いたのは179日前らしい。

もともと、文章でもっとアウトプット増やしていった方がいいんだろうなとは思っていた。
ただ、「こんなに時間かかったのに、全然書けなかった」と遅筆さに落ち込むことが多かった。
また、自分のレベルだともっとインプットに重視した方が、スキルアップに繋がると思っていた。
そのため、ブログ書かなくてもいいかーと思って放置した結果、この広告は、90日以上更新していないブログに表示しています。もばっちり表示されていた...!

でも、今日このツイート見て、ブログ書くことにした。

ぐさっときた。

考えてみれば、今まではブログ書く時は、他人の視点を気にしすぎてた気がする。
もちろん読み手を意識するのは大切だし、自分の書いたエントリが誰かの役に立てばとても良いことだと思う。

でも、ツイートを読んで、自分が今やっていることや思ってることが残せるだけでも充分じゃないかと思えた。
実際に、このエントリを書く前に過去のエントリを読んだら、当時の自分が考えてたことや、こんなこともわかってなかったのか〜とか発見があって面白かった。

誰かのためじゃなく、自分のためにゆるーく書いていこうと思ったので、これからはちょこちょこ書いていくことにする。

fishをインストールしてみた

「モダンなshellといえば、fishでしょう」という声をよく聞くようになったので、入れてみた。
ちなみに、普段はzshにいろいろ手を加えて使ってる。

やったこと

インストールから、よく使いそうな便利プラグインまで紹介されててわかりやすかった。 とりあえずこのサイトと、PATHさえ通しておけば、大体良さそうな感じがした。

PATHの通し方とかを確認した。説明がわかりやすい。

* fish shellでzの結果をpecoって爆速でディレクトリ移動する - ka2n's blog

ディレクトリ移動もpecoしたいので、zコマンドをpecoでフィルタリングできるようにした。

まとめ

手を加えないでも、使いやすい感じになるのですごいなあという印象。
特に大きな不満がなければ、このままzshから乗り換えようかな。

ターミナル 単語単位でカーソル移動

方法

次の単語に移動 Option + f

前の単語に移動 Option + b

注意点

動作しない場合は、ターミナルの設定で、以下の設定になっているか確認する。

プロファイル > キーボードタブ > メタキーとして Optionキー を使用 にチェックを入れる。

参考

こちらは、同じことができる、他のショートカットキーが載ってる。
Macのターミナルで単語ごとにカーソル移動をする方法 - Qiita

Docker nginxのコンテナすぐに終了してしまう現象

自分でDockerfileを書いて、nginxをインストールしたコンテナを作ったが、docker runしても、すぐに処理が終了する(docker psしても、見当たらない)
「なんで・・・?」ってなって調べてみた。

原因

Dockerはプロセスがフォアグラウンドで動いてないと、コンテナが終了するため。
nginxは、デフォルトでデーモンとして動くので、バックグラウンド実行になり、コンテナが終了してしまっていた。

解決策

デーモンをオフにして、フォアグラウンドで実行できるようにすればいい。
方法としてはいくらかあるみたいだが、とりあえず簡単なやつを2つ書いておく。

  • nginx.confに、daemon off;の行を追加することで、デーモンをオフにする
# Dockerfile
echo "daemon off;" >> /etc/nginx/nginx.conf
  • 起動コマンドで、デーモンをオフにする方法もあるみたい。
# Dockerfile
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

参考

Docker 事始め - Qiita

nginxをdockerで動かす時のTips 3選 - インフラエンジニアway - Powered by HEARTBEATS