Skip to content

Instantly share code, notes, and snippets.

@putnamhill
putnamhill / jq-snippets.sh
Last active January 13, 2018 16:21
collection of miscellaneous jq snippets
# print value pairs from an array in lower case
jq --raw-output '.[] | "\(.key_1 | ascii_downcase) \(.key_2 | ascii_downcase)"'
# convert `key=value` lines into `{"key":"value"}` json
jq --raw-input 'split("=") | {(.[0]):.[1]}' some.conf | jq --slurp 'add'
# validate json (bad)
echo '{hello: "there"}' | jq . >/dev/null 2>&1 && echo good json || echo bad json
bad json
@putnamhill
putnamhill / ven-slice.pl
Last active January 11, 2018 00:42
Print items of in-list that are not in other-list; i.e. the relative complement of in-list and other-list.
#!/usr/bin/perl -w
use Getopt::Long;
# use diagnostics;
sub usage {
my $name = $0;
$name =~ s/.*\///;
print <<EOT;
Usage: $name [options] in-list other-list
@putnamhill
putnamhill / private-ip.pl
Last active December 14, 2017 15:02
Reads ip addresses from the command line or stdin and prints them if they belong to any of the three RFC1918 private address blocks
#!/usr/bin/perl -w
use Net::CIDR;
use Getopt::Long;
# Net::CIDR one liner:
# perl -mNet::CIDR -ne 'print if Net::CIDR::cidrlookup($_, ("10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"))'
#
# TODO: add ip address validation
@putnamhill
putnamhill / git-bare-repo-commands.sh
Last active December 14, 2017 14:46
Steps to create a bare git repo
## setting up a personal git repository that you can push change sets to
## ssh-host: a host defined in ~/.ssh/config (see: ssh_config(5))
## camaro: the name of the repo
# on a remote host or local filesystem:
git init --bare camaro.git # (option: use --shared if there are other contributors)
# on local host cd to camaro directory:
git remote add origin ssh-host:[path/]camaro.git
# (for origin on local filesystem: git remote add origin file:///media/volume-name/camaro.git)
@putnamhill
putnamhill / coinmarketcap-parse.sh
Created November 19, 2017 15:56
Reads the coinmarketcap ticker and writes the prices for a cryptocoins to a file
#!/bin/bash
get_data() {
# if the parameter is a local file just cat it (for testing) otherwise try curl
{ test -r "$1" && cat "$1" || curl -s "$1"; } | \
jq --raw-output \
'.[] | "\(.symbol | ascii_downcase) \(.price_usd)"'
}
process() {
@putnamhill
putnamhill / ontouchdo
Last active April 12, 2017 16:25
Run a command each time a file is modified. For example: validate an html file automatically each time it's saved.
#!/bin/sh
# sample usage:
# ontouchdo malformed.html 'clear; xmllint --noout --valid malformed.html 2>&1 | head -n20'
#
# Now fix some things in malformed.html and save. See the remaining errors in real time. Ctrl-c to quit.
[ ! -r "$1" ] && echo 'Nothing to watch.' && exit 1
[ ! -n "$2" ] && echo 'Nothing to do.' && exit 1
@putnamhill
putnamhill / mysql-notes
Last active September 29, 2016 11:45
Creating a new user with the mysql client and set some privileges for all the tables of a database.
CREATE USER 'someuser'@'localhost' IDENTIFIED BY 'cleartext-password';
GRANT SELECT,INSERT,UPDATE,DELETE ON `database`.* TO 'someuser'@'localhost';
# Use awk to to redirect docker build output to stderr for visual feedback
# while capturing the image id on stdout when the build is sucessfull
ID=$(docker build . | awk '{print > "/dev/stderr"} END {if (/^Successfully built /) print $NF; else exit 1}')
# given docker volume path, return local storage path
doc2loc(){ docker inspect --format "{{range .Mounts}}{{if eq .Destination \"$1\"}}{{.Source}}{{end}}{{end}}" $2;}
@putnamhill
putnamhill / stop-watch.sh
Created July 31, 2013 20:04
A simple bash stop watch.
#!/bin/bash
START=$(date +%s)
read -s -n1 -p $'Press a key when done.\n'
ELAPSED_SECONDS=$(bc <<< "scale=10; ($(date +%s) - $START)")
if [ $ELAPSED_SECONDS -gt 60 ]; then
ELAPSED_MINUTES=$((ELAPSED_SECONDS / 60))
ELAPSED_SECONDS=$((ELAPSED_SECONDS - ELAPSED_MINUTES * 60))
echo -n "$ELAPSED_MINUTES minutes "
fi
@putnamhill
putnamhill / smtp-test
Last active December 18, 2015 12:19
smtp commands to test email between two servers via telnet
telnet smtp.example.com 25
Trying 203.0.113.1...
Connected to smtp.example.com.
Escape character is '^]'.
220 example.com running My Bitchin Mail Server 1.0.0
HELO example.org
250 example.com hello example.org (198.51.100.1)
MAIL FROM:<postmaster@example.org>
250 2.1.5 sender OK
RCPT TO:<someone@example.com>