Se você deseja extrair apenas os nomes de login que não contêm o caractere @, o seguinte comando sed
pode ser útil:
echo -e "P=esmtpa A=courier_login:[email protected] S=1573 id=f1cd08396,...\nP=esmtpa A=courier_login:name2 S=1573 id=f1cd08396,..." | \
sed -nr 's/^.*_login:([^ @]+) .*$//p'
A execução deste script resultará na saída abaixo:
name2
Algumas explicações:
-
A primeira linha apenas ecoa 2 linhas de dados de exemplo (separados por um caractere \n
de nova linha).
-
A segunda linha contém o comando sed -nr
, que neste caso usa a sintaxe s/regexp/replacement/p
. Ele ( s
) procura na linha uma expressão regular regexp
correspondente ( -r
). Se uma parte da linha for correspondida, o replacement
será usado para substituir a parte correspondente. Os comandos -n
e p
só precisam omitir as linhas que não correspondem ao regexp
.
-
sed
localiza a string " _login:
" em uma linha. Naquela posição:
- O colchete de abertura marca o início de uma subexpressão. (Considere uma região da linha.)
- O
[^ @]+
corresponde a mais um caractere que não é um espaço nem @. Ele será expandido até que um caractere de espaço seja encontrado.
- O colchete de fechamento marca o final da subexpressão logo antes desse caractere. A região correspondida é armazenada em uma variável chamada
.
- Se você der uma olhada na parte
regexp
, ela segue basicamente o padrão ^.*something.*$
. O ^.*
corresponde a qualquer caractere no início da linha até a expressão algo . Da mesma forma, o .*$
corresponde a qualquer caractere no final da linha após a expressão algo . A correspondência da linha inteira com o regexp
é importante, porque a parte inteira correspondida é substituída.
- A peça de substituição contém apenas a variável
, portanto, o nome de login correspondente será substituído.