Corredor

ウェブ、プログラミングの勉強メモ。

Node.js をシェルのパイプ中で使ってみる

Perl や Ruby だと、よくシェルの中でワンライナーを書いて実行していたりする。それを Node.js でもやってみようという試み。

Node.js をシェル中で使う基本

Node.js をシェルの中で使うには、$ node -e '【コード】' という風に実行する。

手前のコマンドの結果をパイプで受け取って処理するには、次のようなコードを書けば良い。

$ echo 'HOGE' | node -e 'console.log( require("fs").readFileSync("/dev/stdin", "utf-8") );'

// → HOGE

require("fs").readFileSync("/dev/stdin", "utf-8") で標準入力をまるっと受け取れる。

何かを出力したければ console.log() を書けば良い。

サンプルコード

それでは試しにサンプルコード。カンマ区切りの文字列を、コロン区切りに変更して出力する。

$ echo 'HOGE,FUGA,FOO,BAR' | node -e 'const input = require("fs").readFileSync("/dev/stdin", "utf-8"); const result = input.split(",").join(":"); console.log(result);'

// → HOGE:FUGA:FOO:BAR

次は JSON 文字列の操作。JSON.parse() した後は好きにイジれる。

$ echo '{ "HOGE": "fuga", "FOO": "bar" }' | node -e 'const input = require("fs").readFileSync("/dev/stdin", "utf-8"); const parsed = JSON.parse(input); console.log(Object.values(parsed));'

// → [ 'fuga', 'bar' ]

一度 JSON 文字列を Node.js に取り込んだら、この中で何でもやればいいと思うが、もしその後に jq に渡したい、という場合は、Node.js が出力する文字列は JSON.stringiy() しておかないといけない (上の例で出力しているのは、シングルクォートを使っていて「JavaScript の配列」とみなされるので、JSON としては構文エラーになる)。

$ echo '{ "HOGE": "fuga", "FOO": "bar" }' | node -e 'const input = require("fs").readFileSync("/dev/stdin", "utf-8"); const parsed = JSON.parse(input); console.log(JSON.stringify(Object.values(parsed)));' | jq -r '.[1]'

// → bar

こんな感じ。

Perl や Ruby のワンライナーが苦手で、JavaScript ならチョットデキルという人なら、このようにシェル中に Node.js を組み込むのもアリかもしれない。

Node.jsデザインパターン 第2版

Node.jsデザインパターン 第2版

  • 作者:Mario Casciaro,Luciano Mammino
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/05/18
  • メディア: 単行本(ソフトカバー)

Node.js超入門[第2版]

Node.js超入門[第2版]

  • 作者:掌田 津耶乃
  • 出版社/メーカー: 秀和システム
  • 発売日: 2018/08/25
  • メディア: 単行本

入門Node.jsプログラミング

入門Node.jsプログラミング

  • 作者:Jonathan Wexler
  • 出版社/メーカー: 翔泳社
  • 発売日: 2019/09/25
  • メディア: 単行本(ソフトカバー)

実践Node.jsプログラミング Programmer's SELECTION

実践Node.jsプログラミング Programmer's SELECTION