如何在域列表中grep文字匹配


1

我有一个充满主机的主机文件,如下所示:

127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some

在ash shell脚本(BusyBox)中,我只想要文字匹配(es)

match=home.domain.net
grep " $match$" file

这正确地匹配“home.domain.net”,但也“home-domain.net”我在“$ match $”中使用的空间是将其限制在主机名的开头,而$是行结束。我怎么才能匹配“home.domain.net”的文字?

Answers:


0

我怎么才能匹配“home.domain.net”的文字?

你需要使用转义.字符\。然后唯一的特殊正则表达式字符是第二个$

match=home\.domain\.net
grep " $match$" file    

例:

$ cat file
127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some
$ match=home\.domain\.net
$ grep " $match$" file
127.0.0.1 home-domain.net
127.0.0.1 home.domain.net

注意:

  • 127.0.0.1 home-domain.net 在您的示例主机文件中重复。

Source grep - 搜索特定文本的文件。


进一步阅读


逃避所有点是不可能的,这意味着我必须首先在20MB大型主机上执行此操作,然后搜索它并在此文件正在使用时再次删除斜杠。
stargazer 2017年

1
@stargazer你误解了。你需要躲避.搜索字符串不是hosts文件。
DavidPostill

知道了谢谢。这很完美:grep“$(echo $ match | sed's /\。/\\。/ g')$”
stargazer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.