我想/etc/hosts
使用 shell 脚本打印 IP 地址和主机名
/etc/hosts
文件 :
## #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
我需要输出有效的 IP 地址和主机名,而不是所有行
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
不是所有的线
答案1
删除注释掉的和空行的形式/etc/hosts
:
sed -e 's/#.*//' -e 's/[[:blank:]]*$//' -e '/^$/d' /etc/hosts
sed
这按以下顺序使用三个表达式:
- 删除 a 之后的所有内容
#
(包括#
)。 - 删除行尾的空格(空格或制表符)。
- 删除空行。
鉴于您的示例文件,这会产生
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
这显然并没有试图证实留下的地址和名字。
答案2
尝试这个
sed -e '/^#/d' -e '/^\s*$/d' /etc/hosts
将删除所有以 # 开头的行和空行。