Problema com sed

1
root@ROUTER:~# cat maccheck.txt 
logread | egrep ': STA |DHCPACK' | awk '{print $1" "$2" "$3" "$9}' | sed -e 's/\( [0-9] \)/0/' | sed "s/.\{15\}/&:/; s/: /:/g" | cut -d : -f 1,2,4,5,6,7,8,9 | sed "s/.\{13\}/&X/;" | sed 's/:X/ /g' | sed 's/XX:XX:XX:XX:XX:XX/AAAA/g' | sort -u -r

está tudo bem quando está aqui:

root@ROUTER:~# logread | egrep ': STA |DHCPACK' | awk '{print $1" "$2" "$3" "$9}' | head -1
Sep 2 03:03:25 XX:XX:XX:XX:XX:XX

mas é ruim usar o script que tem outras coisas:

root@ROUTER:~# sh maccheck.txt |head -1
Sep0 4 13:13 AAAA

então o "Sep0" é ruim ... como modificá-lo para "Sep"?

root@ROUTER:~# logread | egrep ': STA |DHCPACK' | awk '{print $1" "$2" "$3" "$9}' | sed -e 's/\( [0-9] \)/0/' | head -1
Sep0 2 03:03:25 AAAA

Então, o problema é com:

sed -e 's/\( [0-9] \)/0/'

Q: eu preciso da mesma saída, mas sem o "0" em "Sep", como fazer isso?

    
por gasko peter 05.09.2013 / 21:56

1 resposta

4

dará a você tudo listado em seu grupo (a seção \( \) ). Seu grupo inclui os espaços, então o zero será colocado, então o "2" será adicionado.

Para corrigir, mude para

sed -e 's/ \([0-9]\) / 0 /'

Exemplo

antes

$ cat sample.txt | sed -e 's/\( [0-9] \)/0/' 
Sep0 2 03:03:25 XX:XX:XX:XX:XX:XX

depois

$ cat sample.txt | sed -e 's/ \([0-9]\) / 0 /'
Sep 02 03:03:25 XX:XX:XX:XX:XX:XX
    
por 05.09.2013 / 22:03

Tags