Meu palpite é que sed está fazendo exatamente o que você está mandando: Imprima a primeira "linha" que contém %-12345X%
. Mas como isso não é um arquivo ASCII, mas um arquivo PCL ou PDF com todos os tipos de bytes binários - e não há uma nova linha apropriada para falar, até ficar na frente de "%% Creator:" - ele imprime a coisa toda . Lembre-se, sed imprime a "linha" correspondente. O que você está pedindo para fazer, eu acho, é imprimir "começando nesta string".
Se você deseja obter um arquivo que não é garantido como orientado à linha (como este), você terá que usar uma técnica que não dependa de ferramentas orientadas à linha. Isso pode ajudar: como despejar parte de um arquivo binário . É um pouco mais complicado, mas suas cordas são bastante distintas, então isso deve funcionar.
Hmm ... só tive uma ideia - talvez isso funcionasse. Exclui tudo na mesma "linha" que está na frente do% -12345X%, exceto pela própria string. Em seguida, imprime tudo dessa linha até o final do arquivo. Eu não tentei isso, mas é assim que eu abordaria:
sed -n -e '/%-12345X%/s/.*%-12345X%/%-12345X%/' -e '/%-12345X%/,/%%EOF/p'
Ou melhor ainda:
STR="%-12345X%"
sed -n -e "/${STR}/s/.*${STR}/${STR}/" -e "/${STR}/,/%%EOF/p"