Seu teste echo
é diferente do seu teste de loop de duas maneiras significativas:
- Não há espaço em branco em torno da data
- a regex carece de âncoras
Parte do motivo pelo qual o teste de loop não está funcionando é que você não está levando em conta o espaço em branco. Outra razão é que você está usando o quantificador *
, que significa "zero ou mais" e tem o efeito que você quer alguns dígitos, mas não realmente. Para corrigir isso, você poderia usar o quantificador +
, que significa "um ou mais". Nós vamos usar isso para os caracteres alfa. No entanto, como você deseja eliminar o zero inicial, podemos seguir um pouco a direção diferente com os dígitos.
Como o GNU sed suporta regexes estendidas, podemos eliminar o escape de todos os caracteres especiais, além daqueles que adicionamos. Observe, no entanto, que a opção -r
não é portátil. Além disso, estou substituindo a classe de caracteres nomeada por caracteres alfabéticos para tornar a regex um pouco mais legível e torná-la compatível com idiomas com conjuntos de caracteres diferentes.
sed -r 's/^ *((0)|([1-9]))([0-9])([[:alpha:]]+).*$/ /'
O zero inicial está sendo capturado no grupo 2 e está sendo descartado. Grupo 1 é o dígito principal do número de dois dígitos. Grupo 3 está vazio quando o grupo 2 contém um zero (por causa da alternância criada usando o caractere de pipe).
No que diz respeito a utmp
, last mosh-server
produz nada útil para você (com o libutempter instalado)?
Consulte também Gerenciamento de processos para ver se você encontrou algo útil.