Note que o abaixo só se aplica ao GNU sed
; BSD sed
se comportará de maneira diferente.
Ok, vamos dar um passo a passo, usando isso para o conteúdo de names
:
Alice Zylanzy
Zepher Applecart
Michael Copperside
Aceitaremos o comando e passaremos por ele para ver como funciona:
$ sed 's/\(\w*\) \(\w*\)/ /' names
Zylanzy Alice Zylanzy
Applecart Zepher Applecart
Copperside Michael Copperside
Portanto, o comando sed
dá um sobrenome duplicado na frente da linha. Em seguida, fazemos um simples sort
:
$ sed 's/\(\w*\) \(\w*\)/ /' names | sort
Applecart Zepher Applecart
Copperside Michael Copperside
Zylanzy Alice Zylanzy
Legal, agora eles estão classificados por sobrenome. Agora usamos cut
para nos livrarmos do prefixo que usamos:
$ sed 's/\(\w*\) \(\w*\)/ /' names | sort | cut -f 2-3 -d " "
Zepher Applecart
Michael Copperside
Alice Zylanzy
.. e Bob é seu tio, como eles dizem.
Entrando nas ervas daninhas de como o comando sed
funciona: \w
é um encantamento mágico que significa "caractere de palavra", que é uma abreviação de /[0-9A-Za-z_]/
. \w*
simplesmente significa zero ou mais "caracteres de palavra", que é como os nomes são agrupados. Presumindo que nenhum dos nomes tenha sublinhados ou numerais, pode ser reescrito como:
sed 's/\([A-Za-z]*\) \([A-Za-z]*\)/ /' names
Para desmembrar todo o comando sed
peça por peça:
O comando sed s
é um comando "pesquisar e substituir" ou "substituir". A expressão entre o primeiro e o segundo /
s é substituída pelo que está entre o segundo e o terceiro /
s.
Então, estamos substituindo isso:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to :
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of
' '
( group and capture to :
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of
Com isso:
NODE EXPLANATION
--------------------------------------------------------------------------------
what was matched by capture
' '
what was matched by capture
' '
what was matched by capture