Qual é a maneira portátil de excluir a primeira linha 1 do espaço do padrão?
Com gnu sed
eu posso fazer
s/[^\n]*\n//
mas até onde eu sei isso (usando \n
em uma expressão de colchetes []
) não é portátil.
Exemplo prático: aqui, sed
imprime a última seção do arquivo incluindo o delimitador via código portátil. Eu gostaria de remover a primeira linha do espaço do padrão para excluir o delimitador e fazer isso de maneira portátil. Com gnu sed
é simples:
sed 'H;/===/h;$!d;//d;x;s/[^\n]*\n//' infile
1: Obviamente isso deve ser feito sem reiniciar o ciclo de comandos...
Eu não tenho um sed adequado para tentar, mas você sempre pode fazer loops internos testando e removendo caracteres até chegar à nova linha:
A segunda ramificação de teste,
t rpt
, precisa ser at
em vez de ab
para redefinir o sinalizador interno que diz que ans
foi bem-sucedido desde a última leitura. Você não precisa do{}
, eles são apenas para mostrar melhor o loop.Uma maneira de fazer esse tipo de coisa portátil é a seguinte:
Bobo, mas funcionando:
O que é isso? Você dobra todo o conteúdo e, em seguida, substitui a primeira nova linha por duas novas linhas. Então você tem o mesmo conteúdo duas vezes, com uma nova linha adicional após a primeira linha. Com referências anteriores, agora você pode identificar as diferentes partes.
Se você não quiser usar o buffer de retenção:
E não, eu não gosto disso. Se houver uma maneira de evitá-lo, evite-o.