// node mut.mjs [ ...]: apply each replacement in // order, each matching exactly once, else exit 3 and leave the file alone. import { readFileSync, writeFileSync } from 'node:fs'; const [f, ...pairs] = process.argv.slice(2); let s = readFileSync(f, 'utf8'); for (let i = 0; i < pairs.length; i += 2) { const n = s.split(pairs[i]).length - 1; if (n !== 1) { console.error(`edit ${i / 2 + 1}: matches=${n}`); process.exit(3); } s = s.replace(pairs[i], () => pairs[i + 1]); } writeFileSync(f, s);