#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: extract -t TYPE < STDIN extract -h EOF } help() { cat <<-'EOF' Options: -t TYPE the type of extraction to perform ("content" or "env") -h, --help show this message Separate the content from the "frontmatter", and emit the selected one. Examples: Get the content: $ extract -t content < src/file.md > src/file.entry-content Get the "frontmatter": $ extract -t env < src/f.md > src/f.entry-env EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done TYPE='' while getopts 't:h' flag; do case "$flag" in t) TYPE="$OPTARG" ;; h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) eval "$(assert-arg "$TYPE" '-t TYPE')" case "$TYPE" in content) awk ' separator >= 2 /^---$/ { separator++ } ' ;; env) awk ' /^---$/ { if (++separator > 1) { exit } else { next } } { print } ' ;; *) printf 'Bad value for TYPE: "%s".\n\n' \ "$TYPE" >&2 usage >&2 exit 2 ;; esac