nolu
v0.0.3
Published
Node.js one-liner utility. Provides Ruby compatible options such as -n, -p, -a and more to extend Node.js's simple one-liner option -e
Downloads
9
Maintainers
Readme
nolu
nolu
is a small command-line tool to write one-liners in JavaScript (Node.js).
$ cat test.txt
Lorem 100
Ipsum 42
DolorSitAmet 1
$ cat test.txt | nolu -an --BEGIN "total = 0" -e "total += Number($F[1])" --END "console.log(total)"
143
The Node.js binary node
provides nothing for one-liners except -e <code>
option which simply executes eval(code)
.
Nolu extends this -e
with Ruby compatible options such as -n
(process each line), -a
(auto-split mode) and more.
Install
You need to have Node.js. Install nolu
globally with:
npm i -g nolu
Leave off -g
if you don't want to install globally.
Usage
$ nolu [options]
The following options are available:
|Option|Description|
|:----:|:------------|
|-a
|Turns on auto-split mode when used with -n
or -p
. In auto-split mode, $F = $_.split(/\s/)
at beginning of each loop.|
|-B <code>
, --BEGIN <code>
|Execute code
before any -e
s.|
|-e <code>
|Execute code
. Multiple -e
's are executed in given order.|
|-E <code>
, --END <code>
|Execute code
after all -e
's.|
|-f
|Assume your code
for -e
is a function and call it with $_
and $F
. When using with -p
, print the return value instead of $_
.|
|-F <pattern>
|Use pattern
(regexp) for split() in auto-split mode (-a
).|
|-h
, --help
|Output the help.|
|-j
|Read process.stdin
as JSON and set it to $_
before execute -e
.|
|-J
|Apply JSON.stringify() for printing (-p
).|
|-l
|Enables automatic line-ending processing, which means to chops every "\n"
at the end of line. Works with -n
or -p
.|
|-n
|Read process.stdin
and store it $_
and execute -e
for each line.|
|-p
|Same with -n
but print $_
(or the returned value when -f
) after each loop.|
|-t
|Read process.stdin
and set it to $_
before execute -e
(after --BEGIN
).|
|-v
, --version
|Output the version.|
Examples
A Classical Text Operation: Calculate The Average
$ cat test.txt
Lorem 100
Ipsum 42
DolorSitAmet 1
$ cat test.txt | nolu -an --BEGIN 'total = 0, lines = 0' -e 'lines++; total += Number($F[1])' --END 'console.log(total/lines)'
47.666666666666664
Use --BEGIN
and --END
options (-B
and -E
for short, respectively) instead of BEGIN{...}
and END{...}
block in Ruby.
Any variables are shared between all codes.
NOTE that you may have to use single quote (') to write codes to avoid expanding $_
as an environment variable by your shell.
Handling JSON
For simple JSON transformation, jq may be a good option.
nolu
provides another, more plain-JavaScript friendly way to write complex filter.
A simple example:
$ cat test.json
{
"value": 42,
"v2": 100,
"foo": 20
}
$ cat test.json | nolu -jJpe '$_ = Object.keys($_).map(k => $_[k])'
[
42,
100,
20
]
When -j
option is specified, nolu reads stdin as JSON (and store it to $_
).
-J
modifies -p
to print JSON.stringify($_, null, 2)
.
More functional way
Instead of refering/assigning $_
, you can use a function by -f
options.
$ cat test.txt
Lorem
Ipsum
DolorSitAmet
$ cat test.txt | nolu -pfe 'line => line.toUpperCase()'
LOREM
IPSU
DOLORSITAMET
The return value of the funciton is used to print (-p
).
Simple pipe
The -t
option simply read the whole content of process.stdin
and give it to $_
.
$ cat test.txt
Lorem
Ipsum
DolorSitAmet
$ cat test.txt | nolu -te 'fs.writeFileSync("out.txt", $_.toLowerCase())'
$ cat out.txt
lorem
ipsum
dolorsitamet
Note that fs
is the fs
core module of Node.js.
No fs = require("fs")
is needed.
Any code evaluated in nolu are able to refer the core modules with their names.
License
MIT. See LICENSE.