清除域列表/删除子域

clearing a list of domains / remove subdomains

我有一个很大的域列表,其中混有子域。

google.de
spiegel.de
sub1.google.de
zeit.de
sub1.spiegel.de

编辑器(例如 Sublime 或 Notepad++)中是否有工具或解决方法可以在 domain.tld 删除之前获取所有内容?

Notepad++ 帮我清除了这个列表中的所有其他内容,这些内容一直在里面。但是此时a停了下来。

如果您的意思是删除 ***.something.something,请搜索正则表达式

^.*\..*\..*

什么都不替换。

编辑:第 2 版,您希望保留部分行(在您的示例中重复):

^.*\.(.*\..*)

替换为


() 和 .取其正则表达式的含义(分组和任何字符),以及 \.逃脱 .找到那个角色。如果搜索表达式,$1 获取 () 的(第一)组内的内容(因为如果存在,$2 将获取第二部分...)

如果您有 awk 命令行工具。

awk 'BEGIN{FS="."} NF==3{[=10=]=substr([=10=], length()+2)}1' input.txt

输入文件input.txt:

google.de
spiegel.de
sub1.google.de
zeit.de
sub1.spiegel.de

输出:

google.de
spiegel.de
google.de
zeit.de
spiegel.de

希望这就是你想要的。

脚本解释:

BEGIN{FS="."}    # set input line field separator to  .
NF==3{[=13=] = substr([=13=], length()+2)} # if input line has 3 fields, Remove the first field
1                # output modified line

对于超过 3 个域限定符的更一般情况。

BEGIN{FS=OFS="."}    # set input line field separator to  .
NF > 2{                # if there are more than 2 input fields
        while(NF > 2) [=14=] =substr([=14=], length()+2); #remove the first field from input line
    }              
1                # output modified line
  • Ctrl+H
  • 查找内容:^(?:.+\.)?([^.\r\n]+\.[^.\r\n]+)$
  • 替换为:</code></li> <li><em>选中环绕</em></li> <li><em>检查正则表达式</em></li> <li><em>取消勾选<code>. matches newline
  • 全部替换

解释:

^                   # beginning of line
  (?:               # start non capture group
    .+              # 1 or more any character but newline
    \.              # a dot
  )?                # end group, optional
  (                 # start group 1
    [^.\r\n]+       # 1 or more non dot, non linebreak
    \.              # a dot
    [^.\r\n]+       # 1 or more non dot, non linebreak
  )                 # end group
$                   # end of line

给定示例的结果:

google.de
spiegel.de
google.de
zeit.de
spiegel.de

屏幕截图: