urldecode

コマンドラインで表題を行う。前に”encode“に関しては書いていたのに”decode“には書いていなかったようなのでメモ。

■ 環境

  • shell

■ urldecode

`nkf`を使用する。前の記事の通りにまずは”urlencode“した文字列を使う。

$ echo "テスト" | nkf -WwMQ | tr = %
%E3%83%86%E3%82%B9%E3%83%88
$

これを”urldecode“するには下記のようにする。

$ echo "%E3%83%86%E3%82%B9%E3%83%88" | nkf -w --url-input
テスト
$

戻せた。

以上。

■ 関連

コマンドラインでurlencode

ssh ip address show

表題ではいまいち伝わらない気もするが…。単なるメモである。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ ssh ${HOST} ip address show

スクリプトの中で、複数のホストにSSH接続し、`ip address show`の結果を確認して表示を変えたい。当初、単に下記のように実装したらエラーであった。

$ ssh ${HOST} ip a
bash: ip: command not found
$

実際にSSH接続でログイン後に同じコマンドを実行したところ、正常に結果を得られるのは確認している。

$ ssh ${HOST}
[ec2-user@withsin ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:fa:1f:80:b8:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.11/24 brd 10.1.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4fa:1fff:fe80:b89b/64 scope link
       valid_lft forever preferred_lft forever
[ec2-user@withsint ~]$

さてどういうことかと思ったが、思い当たることをいくつか実施したところ”PATH“の問題であった。下記のように実行することで思い通りの結果を得られた。

$ ssh ${HOST} /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:fa:1f:80:b8:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.11/24 brd 10.1.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4fa:1fff:fe80:b89b/64 scope link
       valid_lft forever preferred_lft forever
$

満足である。

以上。

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
$

以上。

sedで改行文字を削除

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

■ 環境

  • sed
  • Linux
  • Mac OSX El Capitan

■ sed

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

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

sed -e 's/\r//'

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

sed -e 's/^M//'

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

control + V
control + M

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

以上。