strans 0.0.5
dotnet tool install --global strans --version 0.0.5
dotnet new tool-manifest # if you are setting up this repo dotnet tool install --local strans --version 0.0.5
#tool dotnet:?package=strans&version=0.0.5
nuke :add-package strans --version 0.0.5
strans
strans
(string transform) is an intuitive string manipulation
utility for the shell (primarily Unix, but should work™
cross-platform). Users do not need to know anything about
programming. All they need to do is provide strans
with a set of
examples. strans
will automagically learn transformation rules from
these examples and apply them to the input given on STDIN.
How to Install
strans
is distributed platform indepedently as a NuGet package, or
(if you do not want to install dotnet) standalone as an AppImage for
Linux and as a DMG for MacOs. Download the latest strans
from
releases.
Platform-independent dotnet
strans
is available as a global tool on NuGet. If you have dotnet
installed, you can simply dotnet tool install -g strans
to install
it (or use update
, uninstall
etc.).
Linux
Our AppImage should run on practically any recent linux Desktop distribution.
After downloading, simply do
chmod +x strans-linux.AppImage ./strans-linux.AppImage
To install it system-wide as strans
, just
sudo cp strans-linux.AppImage /usr/bin/strans
MacOs
After mounting the dmg
and copying strans.app
into /Applications
, it might be necessary to
chmod +x /Applications/strans.app/Contents/MacOS/strans
/Applications/strans.app/Contents/MacOS/strans
to run strans
.
How to Use
# With before and after example
strans -b pattern-to-match -a desired-transformation
# With file that contains examples
strans -f file-with-examples
# Help page
strans --help
Examples
Example 1: Extract ending of files
Assume that
ls
Document.pdf Document2.pdf Document.txt Document.png
Now we want to get a unique list of all file endings present in the directory:
ls | strans -b Document.pdf -a pdf | sort -u
Note how nicely strans (here defined as an alias) integrates with other tools.
Of course, as StackOverflow will tell you, we could obtain the same result with
ls | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
But with strans
we accomplished the same with much less brain work,
without StackOverflow and Perl, but instead with pure joy!
Example 2: Convert full names to their initials
printf "Moritz Beller\nGeorgios Gousios" |
strans -b "First Last" -a "FL"
neatly outputs
MB
GG
However, when we add a third entry with a middle name, Andy Emil Zaidman, things start to break, as this does not appear in the initials:
MB
GG
AZ
We can fix this by providing strans
with another example. We create
a file called example-transformations
First Last => FL
Firstname Middlename Lastname => FML
and call
printf "Moritz Beller\nGeorgios Gousios\nAndy Emil Zaidman" |
strans --example-file example-transformations
And, voila, the output is
MB
GG
AEZ
Note how strans
adds the second example and generates a global
transformation rule that satisfies all examples given to it. Simply
having the last FML example would not be enough because it would miss
the case where only two names are available.
How to Develop
You need dotnet to run strans
.
git clone https://github.com/Inventitech/strans.git
cd strans
dotnet restore
dotnet publish -c Release
An alias (in your bashrc, ...) can make strans
integrate seamlessly in
a Unix environment:
alias strans="dotnet path/to/strans.dll"
Background
strans
uses program-by-example techniques from Microsoft
PROSE to come up with the rules
behind this string manipulation. PROSE allows the creation of
extremely complex string transformations within a matter of a few
seconds by just giving easy-to-write examples. In its essence,
strans
is only a light-weight wrapper around and direct application
of Microsoft's PROSE framework. strans
provides the goodness of the
now-removed PowerShell (!) command
Convert-String.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.2 is compatible. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
This package has no dependencies.
Version | Downloads | Last updated |
---|---|---|
0.0.5 | 709 | 3/29/2019 |