Se você quiser excluir todas as linhas que começam com% put preservando as duas primeiras linhas de entrada, faça o seguinte:
sed -e 1,2b -e '/^%/d'
Embora o mesmo seja mais legível com awk
:
awk 'NR <= 2 || !/^%/'
Ou, se você estiver após o desempenho:
{ head -n 2; grep -v '^%'; } < input-file
Se você deseja preservar as duas primeiras linhas que correspondem ao padrão, embora elas possam não ser as primeiras da entrada, awk
certamente seria a melhor opção:
awk '!/^%/ || ++n <= 2'
Com sed
, você pode usar truques como:
sed -e '/^%/!b' -e 'x;/xx/{h;d;}' -e 's/^/x/;x'
Ou seja, use o espaço de espera para contar o número de ocorrências dos padrões correspondidos até o momento. Não é muito eficiente ou legível.