O arquivo /etc/services
se parece com isto:
# Network services, Internet style
#
# (more comments)
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
...
discard 9/tcp sink null
discard 9/udp sink null
...
ssh 22/tcp # SSH Remote Login Protocol
...
Ou seja, existem
- linhas que consistem apenas em um comentário
- linhas com comentários finais
- linhas vazias
- duplicados na primeira coluna
Para remover todos eles, o seguinte comando é um possível:
awk '!/^\s*$/ && !/^\s*#/ {print $1}' /etc/services | sort -u | cat -n
Saída
1 acr-nema
2 afbackup
3 afmbackup
4 afpovertcp
5 afs3-bos
6 afs3-callback
7 afs3-errors
...
Explicação
awk '!/^\s*$/ && !/^\s*#/ {print $1}' /etc/services
Em geral, awk
lê um determinado arquivo (ou stdin) e, em seguida, executa o seguinte para cada linha:
condition_for_a_line { commands_when_condition_is_met }
Usamos !/^\s*$/ && !/^\s*#/
como a condição que significa que a linha não está vazia e a linha não inicia com um comentário . Quando ambas as condições são atendidas, a primeira coluna $1
é impressa. Isso nos dá todas as primeiras colunas do arquivo sem linhas vazias e de comentário.
sort -u
Isso classifica os dados e elimina duplicatas de uma só vez.
cat -n
Simplesmente adiciona números de linha.