Skip to content

joatca/ne

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ne

ne manipulates "node expressions", which are commonly used in clustered systems to represent groups of nodes. For example, nodes 1 through 5 and 8 in the "foo" cluster would be written "foo[1-5,8]". Single node names can be written either as "foo123" or "foo[123]". Note that the values within [] are not character sequences like in regular expressions, they are comma-separated ranges of decimal numbers.

Installation

Install Crystal per these instructions: https://crystal-lang.org/docs/installation/

$ crystal build src/ne.cr --release

Usage

By default ne accepts node expressions as arguments separated by operators and outputs the result as an optimal node expression:

$ ne foo[1,2,4,5,6,8]
foo[1-2,4-6,8]

"+" means set union, overlapping ranges will be merged:

$ ne foo[1-5] + foo[4-8]
foo[1-8]

"+" is implied so foo[1-5]+foo[4-8] and foo[1-5] foo[4-8] are equivalent.

Spaces are only significant when the operator is implied. foo[1-4]+foo[4-8] and foo[1-4] + foo[4-8] are equivalent but foo[1-4]foo[4-8] is illegal.

"-" means set difference (it's legal to subtract something that's not in the first expression):

$ ne foo[1-8] - foo[6-12]
foo[1-5]

"^" means the intersection of two expressions: nodes that are in both:

$ ne foo[1-12] ^ foo[8-20]
foo[8-12]

Expressions can be chained, and are evaluated strictly left-to-right without precedence:

$ ne foo[1-12] + foo[8-20] - foo[6-14]
foo[1-5,15-20]

Change the group separator:

$ ne -g, foo[1-5] bar[1-5]
foo[1-5],bar[1-5]

(Or use environment variable NE_GROUP_SEPARATOR.)

You can output results as individual node names ("expanded"). For newline separated:

$ ne -e foo[50-54]
foo50
foo51
foo52
foo53
foo54

(Or set environment variable NE_EXPANDED_OUTPUT=something.)

Or use a specific separator:

$ ne -e -s, foo[50-54]
foo50,foo51,foo52,foo53,foo54

(Or use environment variable NE_NODE_SEPARATOR.)

Multiple node name prefixes are supported:

$ ne foo[1-5] + foo[4-8] + bar[6-10]
foo[1-8] bar[6-10]

You can output an arbitrary prefix before each group (useful with pdsh):

$ ne -p"-w " foo[1-5] + bar[6-10]
-w foo[1-5] -w bar[6-10]

(Or use environment variable NE_GROUP_PREFIX.)

Pad up to a minimum number of digits:

$ ne -d4 foo[1-5]
foo[0001-0005]

(Or use environment variable NE_PAD_DIGITS.)

"@" reads a file or standard input, scanning arbitrary text looking for words that look like node names (this can obviously be unreliable) and returns the union:

$ echo "this is a line that contains the node names foo12 and foo13" | ne @
foo[12-13]

Development

TODO: Write development instructions here

Contributing

  1. Fork it ( https://github.com/joatca/ne/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • [joatca] Fraser McCrossan - creator, maintainer

About

Node Xpression tool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published