#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: extract -t TYPE FILENAME extract -h EOF } help() { cat <<-'EOF' Options: -t TYPE the type of extraction to perform ("content" or "env") -h, --help show this message FILENAME the name of the input file, also to be used as URL. Separate the content from the "frontmatter", and emit the selected one, given the FILENAME. 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)) FILENAME="${1:-}" eval "$(assert-arg "$FILENAME" 'FILENAME')" eval "$(assert-arg "$TYPE" '-t TYPE')" case "$TYPE" in content) awk ' separator >= 2 /^---$/ { separator++ } ' "$FILENAME" ;; env) awk ' /^---$/ { if (++separator > 1) { exit } else { next } } { print } ' "$FILENAME" printf "FILENAME='%s'\n" "$FILENAME" ;; *) printf 'Bad value for TYPE: "%s".\n\n' \ "$TYPE" >&2 usage >&2 exit 2 ;; esac