sed 's/./&;/59; s//&;/43; s//&;/11' <in >out
Não tenho certeza se você deseja que ;
seja o décimo segundo, quadragésimo quarto ou sexagésimo caractere em uma linha ou siga . Se este último, ou adicionar um a todos esses números e corre o risco de acrescentar um ponto e vírgula ao final da linha (se isso importa) ou veja abaixo. Como está escrito acima, no entanto, sed
não irá anexar um sexagésimo caractere se já não houver um cinquenta e nove.
Para fazer inserções em vez de acrescentar:
sed 's/./;&/60; s//;&/44; s//;&/12' <in >out
... é outro caminho. Neste caso, sed
nunca irá acrescentar um ponto e vírgula ao final da linha - ponto e vírgula são inseridos apenas na posição do sexagésimo caractere (por exemplo) se depois disso houver definitivamente um sexagésimo primeiro .
As três substituições não são mutuamente dependentes. De qualquer forma está escrito, sed
adicionará um, dois ou três ponto e vírgula a uma linha, dependendo do seu tamanho. Qualquer linha com cinquenta e nove ou sessenta caracteres terá três linhas mais curtas que são pelo menos maiores que quarenta e dois ou quarenta e três caracteres obtêm dois pontos-e-vírgulas, e outras linhas correspondentes a pelo menos onze ou doze caracteres são editadas apenas uma vez. Linhas com menos de onze caracteres não são afetadas.
Se você quisesse afetar apenas as linhas que eram longas o suficiente para justificar os três pontos-e-vírgulas:
sed -e's/./;&/60;ts' -eb -e:s \
-e's//;&/44;s//;&/12' <in >out
... isso funcionaria.
... com um% GNUsed
(e minised
) você pode T
est uma substituição para falha em vez de apenas para sucesso também:
sed -e's/./&;/59;T; s//&;/43; s/&;/12' <in >out