less –chop-long-line

表題の件。httpdのログを見ていて、見づらいなと思ったので切り替える手段をメモ。

■ 環境

  • less
  • Mac OSX El Capitan

■ –chop-long-line, -S

httpdのログといった1行に出力される文字数が非常に多いものが混ざっている場合、`less`ではデフォルトで行全体を表示するので、ファイル全体の状況を把握しづらい。

例えば下記のような場合。Windowを60文字幅にした場合の表示である。内容は適当である。

XXX.XX.XX.XX - - [19/Jun/2017:02:09:14 +0900] "GET /services
_detail_BK/id=201 HTTP/1.1" 200 223 "-" "Mozilla/5.0 (compat
ible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
XXX.XX.XX.XX - - [19/Jun/2017:02:20:16 +0900] "GET /topics/de
tail/id=1436 HTTP/1.1" 200 219 "-" "Mozilla/5.0 (compatible
; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

`less`で開いた後に切り替えるには下記のように入力する。

- S [Enter]

これで下記のような表示に変わるはずである。

XXX.XX.XX.XX - - [19/Jun/2017:02:09:14 +0900] "GET /services
XXX.XX.XX.XX - - [19/Jun/2017:02:20:16 +0900] "GET /topics/de

元に戻すときも同じコマンドで戻れる。

以上。

dateで前日の日付

表題の通り。前にも書いた気がするのだが見つけられなかったので書いてしまう。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ date

現在時刻を表示するには下記。

$ date
Fri Jun 16 19:10:10 JST 2017
$

1日後の日時を取得するには下記。

$ date -d '1 day'
Sat Jun 17 19:10:15 JST 2017
$

day“だけでなく、”year“, “month“, “hour“, “minute“, “second“とかいける。

1日前の日時を取得するには下記。

$ date -d '1 day ago'
Thu Jun 17 19:10:32 JST 2017
$

ちなみに次の月曜とかも取得ができる。

$ date -d '1 monday'
Mon Jun 19 00:00:00 JST 2017
$

結構便利だ。

ちなみにMacでは下記のように取得できる。

$ date -v 1d
2017年 6月 1日 木曜日 19時17分09秒 JST
$
$ date -v -1d
2017年 6月15日 木曜日 19時17分14秒 JST
$

以上。

box update後にdestroyが必要って。。。

Vagrantにおいて単なる愚痴である。

■ 環境

  • Vagrant 1.9.5
  • Mac OSX El Capitan

■ vagrant up

とあるVMを久しぶりに起動したところ、下記メッセージが表示された。

$ vagrant up
  :
==> default: A newer version of the box 'ubuntu/xenial64' is available! You currently
==> default: have version '20170508.0.0'. The latest is version '20170610.0.0'. Run
==> default: `vagrant box update` to update.
  :
$

新しいBoxのversionがあるとのころで、せっかくなので`update`する。

$ vagrant box update

でも、この起動しているVMは以前のBoxのversionをそのまま使用する。当たり前といえば当たり前なのだが、だったらここで教える必要なくない?と思ってしまうのは自分だけであろうか…。

$ vagrant box list
  :
ubuntu/xenial64  (virtualbox, 20170508.0.0)
ubuntu/xenial64  (virtualbox, 20170610.0.0)
$
$ vagrant box remove ubuntu/xenial64 --box-version 20170508.0.0
Box 'ubuntu/xenial64' (v20170508.0.0) with provider 'virtualbox' appears
to still be in use by at least one Vagrant environment. Removing
the box could corrupt the environment. We recommend destroying
these environments first:

default (ID: a756f0d03c1341fbbfbc5XXXXXXXXXXX)

Are you sure you want to remove this box? [y/N] N
$

当たり前であるが`reload`してももちろん変わらない。今はまだこのVMを`destroy`したくないのでBoxのversionは古いままである。仕方がないのであろうか…。

以上。

sedで改行文字を削除

表題の通り。いつも忘れるのでメモ。

■ 環境

  • sed
  • Linux
  • Mac OSX El Capitan

■ sed

何かしらのスクリプトで、ファイルから読み取って変数に入れて使用している時、たまに行末の改行文字が含まれたままのやつがあり、予期せぬ場所で改行がされてしまうことがある。

改行を削除すれば良いか、と下記のようにしてしまうのだが、これでは削除ができない。

sed -e 's/\r//'

下記のようにしなければならない。

sed -e 's/^M//'

この”^M“を入力するのが少々厄介で、単に文字列として”^M“を入れるでは思い通りに動かない。

control + V
control + M

上記のように入力すると良い。

以上。

base64 encode/decode

Macにおいて表題を実施する。

■ 環境

  • Mac OSX El Capitan

■ base64

Macには`base64`コマンドが存在する。

$ which base64
/usr/bin/base64
$
$ base64 --help
Usage:    base64 [-dhvD] [-b num] [-i in_file] [-o out_file]
  -h, --help     display this message
  -D, --decode   decodes input
  -b, --break    break encoded string into num character lines
  -i, --input    input file (default: "-" for stdin)
  -o, --output   output file (default: "-" for stdout)
$

■ encode

文字列”withsin“を”encode“してみる。

$ echo -n "withsin" | base64
d2l0aHNpbg==
$

■ decode

前述の”encode“で取得できた文字列を”decode“する。

$ echo "d2l0aHNpbg==" | base64 -D
withsin$

最後の改行を”encode“時に含んでいないので、”decode“は改行されなかった。

以上。