No local sed requer a criação de um arquivo de backup durante o processo. A opção -i no sed da Apple requer um argumento de extensão (para o arquivo de backup criado) e consome o próximo argumento. Isso significa que você está dizendo que deseja criar um arquivo de backup com a extensão " #s</head>#... ".
O erro significa que você está se referindo ao a comando ppend . Eu estou indo supor que o valor de $1 começa com um a . Porque -i do argumento anterior sed acha que este é o script a ser executado, em vez do caminho para o arquivo a ser alterado, e você obtém erros de acordo. Este é exatamente o erro que você obteria com a Apple sed e um comando a inválido:
$ sed a sed: 1: "a": command a expects \ followed by text
Forneça um argumento de extensão para -i no seu comando sed :
sed -i.bak "s#</head>#<style> @page { prince-shrink-to-fit: auto } .repository-with-sidebar.with-full-navigation .repository-content {width: 50px ! important;} </style>\n</head>#" "${1}/${2}/${i}.html"
e as coisas funcionarão (embora note que \n não é um escape de nova linha). Se você usa aspas simples, pode até tirar o espaço de " !important ".
Os itens acima funcionarão no GNU sed , mas observe que -i não é um Opção POSIX e geralmente não é portável.
Muitas vezes é recomendado não usar a modificação no local de qualquer maneira, e lidar com o trabalho com uma cópia do arquivo explicitamente você mesmo. Isso depende de você, no entanto.
Você deve citar as expansões da variável ${1} , etc. A citação apenas das barras é inútil, porque elas são sempre literais.