zcat & gzcat

Macにおいて表題のコマンド。

■ 環境

  • macOS High Sierra

■ zcat

gzipで圧縮されたファイルを`zcat`で確認しようとしたところ下記のようになった。

$ zcat example.csv.gz
zcat: can't stat: example.csv.gz (example.csv.gz.Z): No such file or directory
$

なんでだろう?と思い確認。

$ file example.csv.gz
example.csv.gz: gzip compressed data, last modified: Sun Apr  1 18:10:01 2018, from Unix

特に問題なさそうであるのだが…。

$ zless example.csv.gz

`zless`では問題なく中身を確認することができた。

■ gzcat

調べていると、`gzcat`でやるべきとの記載を見つけ試してみる。

$ gzcat example.csv.gz

`gzcat`では思い通りの結果が得られた。これでパイプで他のコマンドに渡していろいろ処理をすることができる。

以上。

echoで表示する内容にタブ

表題の通り。知らなかったのでメモ。

■ 環境

  • sh

■ echo -e

スクリプトの中で情報を表示する際に`echo`で出すが、見栄えをよくする為に文字列の途中でタブを入れたかったので下記のようにやってみたところイメージと違う。

$ echo "aaa\tbbb"
aaa\tbbb
$

シングルクォートで括っているわけでもないのにな、と思っていたら制御文字を有効にするにはオプションが必要なようであった。

$ man sh
  :
 echo [-neE] [arg ...]
  Output  the  args,  separated  by  spaces, followed by a newline.  The return status is always 0.  If -n is
  specified, the trailing newline is suppressed.  If the -e option is given, interpretation of the  following
  backslash-escaped characters is enabled.  The -E option disables the interpretation of these escape charac-
  ters, even on systems where they are interpreted by default.  The xpg_echo shell  option  may  be  used  to
  dynamically determine whether or not echo expands these escape characters by default.  echo does not inter-
  pret -- to mean the end of options.  echo interprets the following escape sequences:
  \a     alert (bell)
  \b     backspace
  \c     suppress trailing newline
  \e     an escape character
  \f     form feed
  \n     new line
  \r     carriage return
  \t     horizontal tab
  \v     vertical tab
  \\     backslash
  \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)
  \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
  :
$

というわけで”-e“オプションをつけて再度実行する。

$ echo -e "aaa\tbbb"
aaa    bbb
$

思い通りの結果を得ることができた。

以上。

■ 関連

Macでの`echo -n`

SendGridAPI

表題を`curl`で実行したい。

■ 環境

  • SendGrid
  • Linux
  • Mac OSX El Capitan

■ SendGrid

下記の言語はライブラリが用意されている。

  • C#
  • Go
  • Java
  • NodeJS
  • PHP
  • Python
  • Ruby

今回は単なるシェルスクリプトの中で実行したかったので`curl`コマンドでメールを送りたい。

cURL Examples for Common Use Cases
https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/curl_examples.html

API KEYはSendGridの管理画面、『Settings > API Keys』から発行する。

https://app.sendgrid.com/settings/api_keys

発行したAPI KEYを下記の”YOUR_API_KEY“の箇所と置換する。

--header 'authorization: Bearer YOUR_API_KEY' \

Bearer “は削除していけない。

宛先や件名、本文は下記ドキュメントの『要求ボディパラメータ』を参照して編集した。

V3 Mail Send API 概要
https://sendgrid.kke.co.jp/docs/API_Reference/Web_API_v3/Mail/index.html

最終的には下記のようになった。

curl \
  --silent \
  --request POST \
  --url https://api.sendgrid.com/v3/mail/send \
  --header "Authorization: Bearer ${SENDGRID_APIKEY}" \
  --header 'Content-Type: application/json' \
  --data "${SENDGRID_REQUEST}"

本文や宛先は動的に生成したかったのと、別の場所で定義したかったのがあり”${SENDGRID_REQUEST}“変数に入れた。これでできたので満足。

以上。

標準エラー出力をパイプラインで次に渡す

表題を一部知らなかったのでメモ。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ パイプライン

標準エラー出力をパイプラインで後続のコマンドの標準入力に渡すときはいつも下記のように実行していた。

$ command1 2>&1 | command2

上記のように実行すれば、標準出力と標準エラー出力がともにパイプラインで後続のコマンドに引き渡される。これを下記のようにも書けるようだ。

$ command1 |& command2

|&“は”2>&1 |“の短縮表記だそうである。是非覚えておこう。

以上。

cutで変数から切り出す

shellスクリプトにおいて表題の通り。

■ 環境

  • sh
  • Linux

■ cut

shellスクリプト内で変数の一部を切り出したい。”.“や”“などデリミタがはっきりしている変数の内容であれば楽なのだが今回は「3文字目から2文字」を抜き出したい。いわゆる”substr“的なことをやりたかった。`cut`でできるようだ。

$ echo "123456789" | cut -c '7-8'
78
$

上記のように切り出すことができる。

$ echo "123456789" | cut -c '3-7'
34567
$

下記のようなことも可能である。

$ echo "123456789" | cut -c '3'
3
$ echo "123456789" | cut -c '3,6'
36
$

以上。