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