node コマンドでワンライナーを書くための基本的な知識をまとめました。

参照: https://nodejs.org/dist/latest-v16.x/docs/api/cli.html

node コマンドのオプション

使うオプションは基本的にこの 3 つです。おおむね -p-r でなんとかなりそうです。

  • -e, --eval "script” … スクリプトを実行
  • -p, --print "script" … スクリプトを実行し、結果を標準出力に渡す
  • -r, --require module … モジュールをロード

例: 標準入力を文字列置換する

標準入力を受け取り、先頭の空白を除き、標準出力に渡す例です。

cat FILE.txt | node -r fs -p 'fs.readFileSync(0, "utf-8").replaceAll(/^\s+/gm, "")'

標準入力だけでなく、ファイル名も指定できます。

node -r fs -p 'fs.readFileSync("FILE.txt", "utf-8").replaceAll(/^\s+/gm, "")'

ポイントは以下の通りです。

  • -r fs … 標準入力を読むのに fs モジュールを使います。
  • fs.readFileSync(0, "utf-8") … 第一引数に 0 を渡すと標準入力を読むことができます1。第二引数に encoding を指定すると string が得られます (指定しないと Buffer 型になります)。
  • replaceAll に正規表現を指定する場合は g フラグが必須です2
  • 正規表現フラグ m で各行にマッチするようになります。ここでは ^\s+ を各行の行頭にマッチさせるため指定しています3

注意: オプションの順序

  • node -r fs -p "script" OK
  • node -p "script" -r fs OK
  • node -p -r fs "script" これは失敗します。 "script"-p オプションの引数であるためだと思われます。