Como faço para substituir números em campo específico?

0

Estou usando o FreeBSD 3.2-RELEASE. Por exemplo, saída de last -

abelovsk14 1 10-7 22:06
adamov14 5 10-5 22:53
almasi14 1 10-8 22:56
anda13 53 10-6 22:16
andrejko14 51 10-7 01:28

É possível substituir o campo $4 por este -

abelovsk14 1 10-07 22:06
adamov14 5 10-05 22:53
almasi14 1 10-08 22:56
anda13 53 10-06 22:16
andrejko14 51 10-07 01:28

$4 field são dias. Quero substituir o dia por um valor por exemplo - 1 para o valor 01 É possível fazer isso com sed ou awk ?

1-01
2-02
3-03
..
9-09
10-10
..
  • info-abelovsk14 (usuário) 1 (numberofnightlogintoserver) 10 (mês) -7 (dia) 22:06 (lastnightlogin) *
por Da No 30.10.2015 / 02:26

3 respostas

1

Dê uma chance:

last | sed 's/^\(.* [0-9][0-9]* \)\([0-9][0-9]\)-\([0-9]\) /-0 /'

É difícil explicar os comandos sed , mas basicamente:

Ele olha para o início da linha para algo seguido por um espaço, depois coincide com um ou mais números (a segunda coluna) e, em seguida, pela correspondência de uma data correspondente a MM-d seguida por um espaço. Em seguida, imprime-os de volta com um zero inserido antes do dia do dígito único.

    
por 30.10.2015 / 19:43
0

tente o seguinte:

last | sed 's/^\(\s*\S\+\s\+\S\+\s\+[0-9]\+-\)\([0-9]\s.*\)$//'

P.ª: estou usando o Linux.

    
por 30.10.2015 / 06:06
0
last | sed 's/-\([1-9]\)\>/-0/'

Procura um dígito de 1 a 9 precedido por hífen e seguido por um delimitador de palavras, captura um dígito, substitui por hífen, zero, dígito.

    
por 30.10.2015 / 22:45