Showing posts with label shell. Show all posts
Showing posts with label shell. Show all posts

Friday, 29 July 2016

Color Diff

Few months ago I have found I feel lack of the highlighting capability of the diff output. To cover this lack I began to look for solutions. A lot of resources refer to the colordiff, the tool written in Perl. But I wasn't satisfied with it. Question on StackOverflow and this article have inspired me to develop the Bash function having the same (or almost the same) functionality as colordiff and having mechanism as described in the early mentioned article.

Some of you can say I have re-invented the wheel because a) there is colordiff, b) diff has the special options to format output. But I'd like to have simple solution with full support of many output formats as much as possible and the simple usage as the command itself. It uses sed to format (colorize) diff output. It has the following features:

  • The wrapper and can be called as the replacement instead the standard tool;
  • Analyzes command line options and generates the special sed commands colorizing output;
  • Covers all known formatting options (--context, --unified, --ed, --rcs, --side-by-side, --show-c-function);
  • It supports CDIFF_COLORS and CDIFF_WHEN, the special environment variables having impact on the function behavior (they works similar to GREP_COLORS for grep).

There is help page below. Just follow this link, download the script and try.

$ diff
Usage: colordiff [OPTION]... FILES

Wrapper for diff to colorize the diff's output for better readability.
Try "diff --help" for more information.

OPTIONS

Diff options

All options will be passed to "diff".

Coloring options

--color[=WHEN], --colour[=WHEN]

Controls the colorizing method. WHEN can be one of "never", "auto" or
"always" (the default value if not specified explicitly). To make affect
globally, set one of these values to CDIFF_WHEN environment variable.

ENVIRONMENT VARIABLES

CDIFF_COLORS
This environment variable is used to specify colors to highlight the
separate parts of the diff output. Its value is a colon-separated list
of capabilities. Names and responsibility of each capability correspond
to the configuration parameters "color.diff." used in "git config".
Values are integers in decimal representation and can be concatenated with
semicolons. Further these values are assembled into ANSI escape codes.

meta=40;1;37
Metainformation (names of compared files)

frag=36
Hunk header (line numbers of changed lines)

old=31
Removed lines

new=32
Added lines

mod=34
Modified lines

CDIFF_WHEN
Colorizing method does effect on all runs; assumes the same values as for
the "--color" option. The default value is "auto" and can be superseded
by the "--color" option.

Wednesday, 4 December 2013

Cygwin Here

This short article explains how to open a specific folder in Cygwin.

Tuesday, 2 October 2012

Continuing long lines in a batch script

Unintentionally I found for myself that a batch script has a nice feature to break long lines without loosing of possibility of reading them.

Imagine, you have some weird combination of commands as below that is not put completely in one line of a screen.

some-command-with-many-arguments | another-lomg-command-with-its-own-arguments | etc | etc | etc

If the line of a code cannot be shown within one line on a screen it will be i) either turned and the rest of line will be shown below on one or more lines or ii) continued out of edges of the screen with a horizontal scrolling bar. Both of them are not convenient because we not able to observe the code entirely.

Fortunately, modern batch scripts (in XP, Vista, Win7) have blocks implemented by brace:

(
    some-command-with-many-arguments 
) | (
    another-long-command-with-its-own-arguments 
) | etc | etc | etc

I known this feature (because I used brace in the if-else and for statements) but did not realised right now.

So, this gives us good possibility to break the long line into a several lines without loosing of functionality. This is better than nothing and is better than undocumented feature using the DOS-like escaping character ^ at the very ending of the line because you have to look after that this character is in the lastest character of the line. See the same example with the esacaping character:

some-command-with-many-arguments | ^
another-long-command-with-its-own-arguments | ^
etc | etc | etc

Unix shell scripts are featured to continue long commands using by backslashes since the begining of the Unix wolrd.

some-command-with-many-arguments \
| another-long-command-with-its-own-arguments \
| etc | etc | etc

Saturday, 29 September 2012

How to concatenate multiple lines in console (bash, cmd)

If for some reasons you need to have concatenated lines try one of the recipes below.

Monday, 25 June 2012

Merge and sort many logfiles having multiline entries

logmerge is the small and powerful script to merge two or more log files so that multiline entries appear in the correct chronological order without breaks of entries. Optional arguments control an adding of descriptive fields at the beginning of each line in the resulting combined logfile. Reading of .gz/.bz2 files is available.

Sunday, 25 March 2012

Universal way to identify your external IP and more

There are many such kind of resources in Internet but this is the best. It allows the numerous structured data and it has nice name. Meet http://ifconfig.me/.
Command line interface
Using curl
curl ifconfig.me
or wget
wget -qO - ifconfig.me/ip
JScript
JS
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/ip', false);
xmlhttp.send();
 
var ip = xmlhttp.responseText;
JS+XML
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/all.xml', false);
xmlhttp.send();
 
var ip = xmlhttp.responseXml.getElementsByTagName('ip_addr')[0].text;
Having JSON library you can read and parse JSON data:
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/all.json', false);
xmlhttp.send();
 
var data = JSON.parse(xmlhttp.responseText);
var ip = data.ip_addr;
VBScript
Dim xmlhttp, ip
 
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET", "http://ifconfig.me/ip", False
xmlhttp.send
 
ip = xmlhttp.responseText

Sunday, 4 October 2009

WHICH: UNIX-to-NT ported

WHICH is unix-world command, implemented using CMD/BAT feature only.

Monday, 15 June 2009

WC: Emulation of the unix command

This is curious, joke. It is attempt to emulate the unix-commad wc. Do not consider this as fully featured application. It has essential shortcomings - slower than analogs and it gives great mistakes when counting the number of words. This is related with features of processing of special characters when passing them as arguments.