Tente isso
sed -e '/^#/d' -e '/^\s*$/d' /etc/hosts
excluirá todas as linhas iniciadas com # e linhas em branco.
Eu quero imprimir o endereço IP e o nome do host de /etc/hosts
usando um script de shell
/etc/hosts
file:
## #For example:
## #102.54.94.97 rhino.acme.com # source server
## #38.25.63.10 x.acme.com # x client host
## #localhost name resolution is handled within DNS itself.
## #127.0.0.1 localhost
## #::1 localhost
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
# #122.55.80.97 bbb.bb.bb
# #122.55.80.98 ccc.cc.cc
Eu preciso de um endereço IP válido de saída e nome de host nem todas as linhas
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
não todas as linhas
Removendo as linhas comentadas e vazias de /etc/hosts
:
sed -e 's/#.*//' -e 's/[[:blank:]]*$//' -e '/^$/d' /etc/hosts
Isso usa três expressões sed
na seguinte ordem:
#
(incluindo o #
). Dado o seu arquivo de exemplo, isso produz
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
111.11.1.1 aaaa.aa.aa
Isso obviamente não tenta validar os endereços e nomes restantes.
Tags sed linux shell shell-script