grep regex检查行是否包含子域
我有一个包含域名的文件。我想搜索并删除子域的行。子域包含多个点(.)。示例: 子域:grep regex检查行是否包含子域,regex,string,ubuntu,search,grep,Regex,String,Ubuntu,Search,Grep,我有一个包含域名的文件。我想搜索并删除子域的行。子域包含多个点(.)。示例: 子域:ab.cd.fg或ab.cd.fg.hi。 完整域包含一个点:ab.cd 我不确定我的正则表达式是否正确,是否会捕获任何子域,尽管有点: grep '.\..(\..)+' myfile.csv 以上是我尝试搜索包含子域的行。如何删除它们并将新的筛选结果保存到新文件中 样本输入: ab.cd.fg ab.cd ab.cd.fg.hi.jk 输出应该是一个文件,从带有子域的行中清除,子域是带有一个点的行 ab.
ab.cd.fg
或ab.cd.fg.hi
。
完整域包含一个点:ab.cd
我不确定我的正则表达式是否正确,是否会捕获任何子域,尽管有点:
grep '.\..(\..)+' myfile.csv
以上是我尝试搜索包含子域的行。如何删除它们并将新的筛选结果保存到新文件中
样本输入:
ab.cd.fg
ab.cd
ab.cd.fg.hi.jk
输出应该是一个文件,从带有子域的行中清除,子域是带有一个点的行
ab.cd
这就是工作:
grep -P '^[^.]+\.[^.]+$' input_file
在哪里
:perl正则表达式-P
:行首^
:1个或多个非点字符[^.]+
:一个点\.
:1个或多个非点字符[^.]+
:行尾$
grep-v'\..*\.
或awk-F.'NF==2'
。。。某处有一个副本你的要求不完整yahoo.co.uk
和poughkeepsie.k12.ny.us
是各自层次结构中的顶级域。此正则表达式中的任何内容都不需要-P
选项,这是非标准的,因此不完全可移植。去掉这个选项。@tripleee:如果没有-P
,它对我不起作用。(Virtualbox中的LinuxMint)您需要-E
,或者反斜杠。-E
选项在POSIX中定义,可广泛移植。但是,是的,对不起,我忽略了一个事实,那就是你使用了+
(这是在egrep
中引入的)而不是*
(这是汤普森最初的grep
)。@tripleee:好的。