pt + número de acréscimo após a última palavra correspondente na linha

2

Eu tenho um arquivo de log chamado: log.txt

meu alvo é adicionar o parâmetro: $ PARAM somente após a última string: "Number" no arquivo log.txt

  • observação: PARAM poderia ser qualquer número

exemplo:

 PARAM=34.43435454

cauda -10 log.txt

   date 12.3.2010 Number 2.34
   date 12.3.2010 Number 2.14
   date 12.3.2010 Number 34.43435454

alguém tem idéia de como fazer isso com sed?

    
por klod 26.01.2011 / 13:59

1 resposta

3

Após "Número" em todas as linhas:

sed "s/.*Number/& $PARAM/" log.txt

Após "Número" na última linha:

sed "\$s/.*Number/& $PARAM/" log.txt

Após "Número", a última vez que aparece no arquivo:

sed "/Number/!b;:a;\$!N;/\n.*Number/{h;s/\n[^\n]*\$//p;g;s/^.*\n//};\$!ba;s/^\(.*Number \)/$PARAM/" log.txt

Explicação da última versão:

  • /Number/!b - se a linha não contiver ramificação "Número" no final do script e imprima a linha
  • :a - rótulo de loop "a"
    • \$!N - se não for a última linha do arquivo, anexe a próxima linha ao final do conteúdo do espaço padrão
    • /\n.*Number/{ - se o espaço padrão incluir "Número" depois de uma nova linha
      • h - copia o espaço padrão para armazenar espaço
      • s/\n[^\n]*\$//p - exclua a parte após a nova linha e imprima o restante
      • g - copiar espaço para espaço padrão
      • s/^.*\n//} - exclua a parte antes da nova linha, termine se
  • \$!ba - ramificar para rotular "a"
  • s/^\(.*Number \)/$PARAM/ - adiciona o conteúdo da variável depois de "Número"
por 26.01.2011 / 16:22

Tags