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"
OKnode -p "script" -r fs
OKnode -p -r fs "script"
これは失敗します。"script"
が-p
オプションの引数であるためだと思われます。
-
0
はファイルディスクリプタで、標準入力を表します。参照: fs.readFileSync(path[, options]) ↩︎