Skip to content

Instantly share code, notes, and snippets.

@Profpatsch
Last active August 17, 2017 03:30
Show Gist options
  • Save Profpatsch/b639e9a11e64f1db82130b9075b9ac2b to your computer and use it in GitHub Desktop.
Save Profpatsch/b639e9a11e64f1db82130b9075b9ac2b to your computer and use it in GitHub Desktop.
jq replacement (‽)
#!/usr/bin/env bash
if [[ -z "$1" ]]; then
echo "No filter given, abort"
exit 1
fi
tmp=$(mktemp -d)
jq="$tmp/jq"
cat > "$jq" <<EOF
#!/usr/bin/env nix-shell
#!nix-shell -i runhaskell -p 'haskellPackages.ghcWithPackages (h: [ h.lens-aeson h.lens h.safe h.protolude ])'
{-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-}
import Protolude
import Data.String (String)
import Data.Aeson
import Data.Aeson.Lens
import Control.Lens
import System.FilePath.Lens
import System.Environment (getArgs)
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
main = do
data_ <- BL.getContents
let out = case (eitherDecode' data_ :: Either String Value) of
Left err -> panic $ "decoding failed: " <> toS err
Right val -> userProgram val
BL.putStr $ encode (out :: Value)
userProgram =
EOF
echo "$1" | sed 's/^/ /' >> "$jq"
chmod +x "$jq"
"$jq"
@Profpatsch
Copy link
Author

Usage:

$ chmod +x jq
$ echo '{"a": 4}' | ~/tmp/jq '(key "a" . _Integral) +~ 5'
{"a":9}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment