Fazer isto em sed genericamente exigiria caracteres de escape no regexp usado para encontrar a substring que eu encontrei aqui (nota: mais informações aqui se você tiver problemas) .
Depois, descobri como canalizar para uma função aqui .
Colocando tudo isso em uma função que eu possa usar no meu .bashrc
, parece que (embora eu não precise definir o a e b vars, mas facilita a leitura):
between(){
a=$(printf '%s\n' "$1"|sed 's![\*.^$/[]!\&!g')
b=$(printf '%s\n' "$2"|sed 's![\*.^$/[]!\&!g')
sed "s/.*$a\(.*\)$b.*//"
}
como Joseph R. mencionou, esta resposta mostra como usar grep -oP para fazer semelhante. Para escapar do regexp compatível com Perl, encontrei este , então talvez o seguinte também funcione:
between(){
a=$(printf '%s\n' "$1"|sed 's![]\*.^+?(){|$[]!\&!g')
b=$(printf '%s\n' "$2"|sed 's![]\*.^+?(){|$[]!\&!g')
grep -oP "(?=$a).*?(?=$b)"
}