Skip to content

Instantly share code, notes, and snippets.

@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';
@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 / 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 / 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 / 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 / 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 / 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 / ics2stdout.awk
Created February 23, 2019 23:03
an awk script to convert Apple's reminder lists to plain text
#!/usr/bin/env awk -f
BEGIN {
FS = ":"
RS = "\r\n"
OFS = "\t"
}
/BEGIN:VTODO/ {
my_status = ""

Git current branch

The shell used in the following examples is bash, but the commands can be adapted for other shells.

reading it

Determine if working in a git repository

The goal here is to have a performant way to determine if we are in a git repo without printing anything.

git status --porcelain --untracked-files=no &amp;&gt;/dev/null &amp;&amp; \
@putnamhill
putnamhill / group-dupes.pl
Last active June 19, 2021 14:16
Print groups of files that are duplicates.
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use Digest::MD5;
#use diagnostics;
my $minimum = 0;
my $header = '';