Estou escrevendo um pequeno script de shell para gerar uma listagem de diretórios. Para tornar a saída facilmente personalizável, o script apenas constrói uma tabela HTML e deve substituir um token específico em um arquivo de modelo por essa tabela e gravá-la em stdout
.
Exemplo:
Arquivo de modelo:
<!doctype html>
<html>
<head><title>Directory Listing</title></head>
<body>
{{LISTING}}
</body>
</html>
{{LISTING}}
deve ser substituído pela listagem (que é armazenada em uma variável shell).
O problema aqui é que um simples sed 's/{{LISTING}}/$listing/'
seria limitado ao tamanho máximo do argumento que não funciona com listagens longas.
Como posso substituir um padrão em um arquivo por uma string longa usando utilitários POSIX?
EDIT:
Para adicionar mais esclarecimentos: minha solução atual é assim:
awk '{ gsub(A, B); print; }' A="{{LISTING}}" B="$listing" < $template
$listing
é expandido à medida que o awk é invocado, mas isso pode exceder os limites de tamanho do argumento, pois $listing
pode ser realmente longo. Por exemplo, ao gerar uma listagem de /usr/lib
, recebo um erro:
/bin/awk: Argument list too long
Estou pensando se há uma solução para substituir um padrão em um arquivo de texto com stdin
.