12 lines
531 B
JavaScript
12 lines
531 B
JavaScript
// node mut.mjs <file> <from> <to> [<from> <to> ...]: 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);
|