#!/usr/bin/env bash # Written by Erez Binyamin (github.com/ErezBinyamin) # Search for an integer sequence oeis() { local URL='https://oeis.org' local TMP=/tmp/oeis local DOC=/tmp/oeis/doc.html mkdir -p $TMP # Search sequence by ID if [ $# -eq 1 ] then # Generate URL [[ ${1:0:1} == 'A' ]] && ID=${1:1} || ID=${1} ID=$(bc <<< "$ID") ID="A$(printf '%06d' ${ID})" URL+="/${ID}" curl $URL 2>/dev/null > $DOC # ID printf "ID: ${ID}\n" # Description grep -A 1 '' $DOC \ | sed '//d; /--/d; s/^[ \t]*//; s/<[^>]*>//g;' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</.*, .*[0-9]' $DOC \ | sed 's/<[^>]*>//g' \ | grep -v '[a-z]' \ | grep -v ':' printf "\n" # Code if grep -q 'MAPLE' $DOC then GREP_REGEX='MAPLE.*CROSSREFS' grep -q 'PROG' $DOC && GREP_REGEX='MAPLE.*PROG' grep -q 'MATHEMATICA' $DOC && GREP_REGEX='MAPLE.*MATHEMATICA' cat $DOC \ | tr '\n' '`' \ | grep -o "${GREP_REGEX}" \ | tr '`' '\n' \ | sed 's/^[ \t]*//; s/<[^>]*>//g; /^\s*$/d;' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</]*>//g; /^\s*$/d;' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</]*>//g; /^\s*$/d;' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</ ${TMP}/lang langs=("Axiom" "MAGMA" "PARI" "Python" "Sage" "Haskell" "Julia" "GAP" "Scala") for L in ${langs[@]} do echo "foo" | pygmentize -l ${L,,} &>/dev/null && PYG="${L,,}" || PYG="c" if grep -q "(${L})" $DOC then awk -v tgt="${L}" -F'[()]' '/^\(/{f=(tgt==$2)} f' ${TMP}/lang \ | pygmentize -f terminal256 -g -P style=monokai -l ${PYG} printf "\n" fi done # Search unknown sequence else # Build URL URL+="/search?q=signed%3A$(echo $@ | tr ' ' ',')" curl $URL 2>/dev/null > $DOC # Sequence IDs grep -o '=id:.*&' $DOC \ | sed 's/=id://; s/&//' > $TMP/id # Descriptions grep -A 1 '' $DOC \ | sed '//d; /--/d; s/^[ \t]*//; s/<[^>]*>//g' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</ $TMP/nam # Sequences grep -o '.*' $DOC \ | sed 's/<[^>]*>//g' > $TMP/seq # Print data for all readarray -t ID < $TMP/id readarray -t NAM < $TMP/nam readarray -t SEQ < $TMP/seq for i in ${!ID[@]} do printf "${ID[$i]}: ${NAM[$i]}\n" echo ${SEQ[$i]} printf "\n" done fi } oeis $@