Skip to content

Instantly share code, notes, and snippets.

@Announcement
Created April 15, 2018 08:26
Show Gist options
  • Save Announcement/afaa373e8ba582388e91478590fa85ae to your computer and use it in GitHub Desktop.
Save Announcement/afaa373e8ba582388e91478590fa85ae to your computer and use it in GitHub Desktop.
echo "foo bar" | node sed 's/foo/[$0]/g'
const replacementExpression = /^s\/((?:\\.|[^\/\\])+)\/((?:\\.|[^\/\\])*)\/([gimuy]{0,5})$/
const replacementExpressionCompiled = replacementExpression.exec(process.argv[2])
function getReplacement (input, source, flags, replacement) {
const expression = new RegExp(source, flags)
return input.replace(expression, function (matched/*, ...captures, index, fulltext, groups? */) {
const parameters = Array.from(arguments)
const [index, fulltext, groups] =
typeof arguments[arguments.length - 1] === 'object' ?
parameters.splice(-3) :
parameters.splice(-2)
const captures = parameters.splice(1)
return replacement
.replace(/(?:\\|\$)(\d+)/g, (x, y) => ([matched, ...captures])[Number.parseInt(y)] || x)
})
}
process.stdin.on('data', buffer => {
process.stdout.write(
getReplacement(buffer.toString(),
replacementExpressionCompiled[1],
replacementExpressionCompiled[3],
replacementExpressionCompiled[2]))
})
@Announcement
Copy link
Author

this will probably do the same thing

const replacementExpression = /^s\/((?:\\.|[^\/\\])+)\/((?:\\.|[^\/\\])*)\/([gimuy]{0,5})$/
const replacementExpressionCompiled = replacementExpression.exec(process.argv[2])

process.stdin.on('data', buffer => {
	process.stdout.write(
	buffer.toString().replace(
		new RegExp(replacementExpressionCompiled[1], replacementExpressionCompiled[3]),
		replacementExpressionCompiled[2] ))
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment