Estou tentando classificar meus logs e descobri que as datas de um dígito foram cortadas incorretamente. Agora eu quero adicionar um 0 ou remover o espaço extra.
Antes disso, eu queria ver como obter as linhas corretas que desejo editar.
Uma cauda das últimas 3 linhas:
$tail -3 testlog
Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Agora, trabalhando no script, escrevi isso esperando obter o mesmo resultado:
$ while read line; do if [ $(echo $line|cut -c7) == "b" ]; then echo $line; fi; done < testlog | tail -3
Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
Mas com isso, o espaço extra antes do 7 é removido. Eu não esperava que isso acontecesse. Não estou cortando com o meu roteiro, estou?
Desde já, obrigado!
Você notaria o mesmo para qualquer outro espaço duplicado (ou mais). Expansões variáveis sem aspas são seguidas por divisão de palavras , portanto, uma vez que as palavras são divididas por espaços (IFS), elas são remontadas com um espaço entre elas.
Uma solução alternativa pode ser:
Como exemplo concreto, veja:
contra:
Vale a pena ler: Por que meu script de shell engasga com espaços em branco ou outros caracteres especiais?