我有一个包含大量域名的文本文件。我想删除所有不属于以下扩展名的域名:
.com
.net
.org
.biz
.us
我尝试了几种方法,但似乎没有任何效果。我遇到的主要问题是某些线路没有被删除。
例如,以.com.br
结尾的域名未被删除,因为该行中有.com
,但实际上我希望将其删除...
如果这是文件:
test.com
example.com.br
testing.net
然后应该成为这个:
test.com
testing.net
似乎应该有一种方法可以使用sed
执行此操作,但我无法使其正常工作:/
这是我尝试过的:
sed '/.com$\|.net$\|.org$\|.biz$\|.us$/!d' *.txt
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
我发现你没有粘贴你正在使用的确切输入,但这应该可以正常使用。
ubuntu$ cat text.txt
.com
.net
.org
.biz
.us
.com.br
.mlp
.grrr
ubuntu$ grep -E '[.]com$|[.]net$|[.]org$|[.]biz$|[.]us$' text.txt
.com
.net
.org
.biz
.us
问候!
答案 1 :(得分:0)
使用grep
:
grep '\.\(com\|net\|org\|biz\|us\)$'
如果版本支持,扩展正则表达式更具可读性:
grep -E '\.(com|net|org|biz|us)$'
答案 2 :(得分:0)
不确定,您是否可以在您的环境中使用awk
和实际数据,对于给定的输入,应该可以使用:
$ cat domain_ext_file
.com
.net
.org
.biz
.us
$ cat site_list
test.com
example.com.br
testing.net
$ awk -F'.' 'FNR==NR{a[$NF];next}$NF in a' domain_ext_file site_list
test.com
testing.net
<强>解释强>
(.)
,将最后一个字段($NF
)存储在domain_ext_file中,在数组a
中,转到下一行site_list
)时,如果数组a
的键/索引是第二个文件的最后一个字段($NF in a
),则打印此类行/记录/ line