Node.js でシェルコマンド
VSCode の拡張機能でシェルコマンドを書いたので( ..)φメモメモ
VSCode の画面を構成するworkbench.main.css
が超長かったので、
文字列をプログラム中で取得せずに編集できないか検討してみた。
やること
特定のファイルに書き込まれた文字列をシェルコマンドで編集する。
超長い文字列が含まれるファイルの操作に使えるかもしれない。
環境と使うパッケージ
- 環境
- Node.js
- TypeScript
- 使うパッケージ
- child-process
child-process パッケージの exec メソッドで、シェルコマンドの実行が可能。
実装
/*ext-hoge-start*/
と/*ext-hoge-end*/
で囲まれた部分を置換する。
ポイントとしては、
cat ${path}
で文字列を取得し、sed
にパイプする。-i
オプションにより、sed ... > ${path}
としなくても上書き保存ができる。
import * as cp from 'child-process'; ... //対象のテキストファイル const path = './hoge.txt'; const hoge = 'hoge'; //検知する文字列 //「*」はバックスラッシュ2つでエスケープ const target = `/\\*ext-${hoge}-start\\*/.*/\\*ext-${hoge}-end\\*/`; //exec でシェルコマンドを実行 //target でマッチした部分を fuga に置換する cp.exec(`cat ${path} | sed -i -e "s|${target}|fuga|" ${path}`, (err, stdout, stderr) => { if (err) { console.log(err); } else { console.log(stdout); } });
実行するとこんな感じになる。
# コマンド実行前 $ cat ./hoge.txt foo bar /*ext-hoge-start*/hoge/*ext-hoge-end*/ # コマンド実行後 $ cat ./hoge.txt foo bar fuga